读书人

Top K有关问题(求前k个最大的数)

发布时间: 2013-10-27 15:21:50 作者: rapoo

Top K问题(求前k个最大的数)

最近在笔试的时候经常会遇到求前k个最大的数的算法,查阅了一些资料,总结如下:

在数据不多的情况下采用快速排序,在海量数据下则采用堆排序。

以下将针对这两种方法给出详细的实现代码,希望能帮到大家,顺便替自己复习一下,如果发现有错的,欢迎指正。


一、快速实现前k个最大数据的排序,总数据为n个


1、以下的partition函数对线性表从low到high进行一趟快速排序


void KHeapSort(HeapType &H){for(int i=H.length/2;i>0;--i)HeapAdjust(H,i,H.length);//把H.r[1..H.length]建成大顶堆,从非终端结点开始for(int i=H.length;i>H.length-k;--i)H.r[1]<——>H.r[i];//将堆顶元素和当前未经排序子序列H[1..i]中最后一个记录相互交换HeapAdjust(H,1,i-1);//将H.r[1..i-1]重新调整为大顶堆}}


该线性表的最后k个数即为最大的k个数



读书人网 >编程

热点推荐