首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-10-27 
Top K问题(求前k个最大的数)最近在笔试的时候经常会遇到求前k个最大的数的算法,查阅了一些资料,总结如下:

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个数



热点排行