We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent e1b880d commit e57d84eCopy full SHA for e57d84e
MD/通用基础-排序算法.md
@@ -18,3 +18,15 @@
18

19
20
堆排序过程的最好和最坏时间复杂度是O(nlog<sub>2</sub>n)
21
+
22
+## TOP K
23
+如何在N个元素中寻找前K大的数?
24
25
+快速排序:
26
27
+* 原理:每次快速排序中的划分过程能找到一个全部大于左边元素的一个值。如果该值的位置等于K,那么这个值和它左边的所有元素就是前K大的数;如果该值的位置小于K,那么对右边的元素继续划分排序;如果该值的位置大于K,那么对左边的元素继续划分排序
28
+* 问题:但空间复杂度是O(N),如果你要在很多元素中找很少几个top K的元素,或者在一个巨大的数据流里找到top K,快速排序是不合适的,堆排序更省地方
29
30
+堆排序:
31
+* 原理:申请一个容量为K的数组,存入数组的前K个元素,创建长度为K的最小堆;从K开始循环数组的剩余元素,如果元素(a)比最小堆的根节点大,将a设置成最小堆的根节点,然后重建最小堆;循环完成后,最小堆中的所有元素就是需要找的最大的K个元素。
32
+* 优点:可以在N个元素中找到top K,时间复杂度是O(N log K),空间复杂的是O(K)
0 commit comments