摘要:
一.问题:假设有一个含有n个不同元素的数组S,现在要求寻找出数组S中前K大的元素。利用堆排序算法解决这个问题,有两个思路:1.利用大根堆排序“每一趟都能产生1个最大值”的特性,来做K趟堆排序,则可找出这个前K大的元素2.首先取出数组S中的前K个元素,利用这K个元素,建立小根堆,然后利用小根堆产生的最小值与剩余的S-K个元素相比较,如果后者大,则交换他们的位置,否则不变,这样也能产生前K大的元素。二.分别实现这两种思路回忆一下堆排序:1.自底向上修复原始堆(建堆) 2.取堆中最大的叶子取带堆的根元素,并输出根元素 3.自顶向下的修复根堆其中最重要的子方法:以某个节点开始进行堆修复,以大根堆为例, 阅读全文