堆排序

堆排序: https://www.cnblogs.com/chengxiao/p/6129630.html
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。

堆是具有以下性质的完全二叉树:
每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;
或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。

堆排序的应用: topK 问题
https://www.jianshu.com/p/83988a6312b5

假设现在我们有一个包含 10 亿个搜索关键词的日志文件,如何快速获取到 Top 10 最热门的搜索关键词
可以使用MapReduce
如果是单机处理并且内存不足以把10亿数据放入内存的时候。
按照关键词放入散列表中,value为次数。之后遍历散列表后使用小顶堆得到Top K。但是这也会导致内存不足。
所以可以将10亿个关键词按照哈希值划分到10个空文件中,并对每个文件(500MB)取出Top 10,并将10个 Top 10,放在一块并得到最终Top 10

https://blog.csdn.net/runrun117/article/details/80478211

补充:时间复杂度

原文地址:https://www.cnblogs.com/kevin-yuan/p/13499366.html