堆排序
堆,就是完全二叉树,堆排序,主要是先建立一个最大堆
然后将最大堆的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 '堆排序';
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。