1

堆排序

堆,就是完全二叉树,堆排序,主要是先建立一个最大堆

然后将最大堆的root拿下,剩下的数据再建立最大堆,依次反复,边得到排序,是一种很巧妙地算法

算法导论中说,堆排序是个很漂亮的算法,但是一个快排的好的实现,要优于堆排序,所以,堆排序实际使用中用的不是很多,但是很适合维护优先级队列,优先级队列的问题,放在以后在讨论

补充:

上面说到了大部分情况我们会使用快速排序来解决排序问题,下面有一种情况,非常适合堆排序,题目如下

寻找最小的k个数
题目描述:5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。

(来自 http://blog.csdn.net/v_JULY_v/article/details/6370650)

这个时候用最大堆非常合适,即减少了排序的时间复杂度,为O(nlogk)[相比较交换排序,nk],相对于快速排序,减少了空间利用,只需要存储k个元素即可,如果题目是庞大的数据量,是非常好的选择

(堆排序实现算法等待补充)

echo '堆排序';


beck徐工
59 声望7 粉丝

卖艺的小青年(php,golang)