Pictures Dating Pictures Dating Pictures Dating

Pictures Dating Www Picturesdating Pictures Dating 一亿数据获取前100个最大值(利用quicksort的原理实现) [# 70] - Yuwen's Hero - 博客频道 - CSDN.NET

Pictures Dating Www Picturesdating Pictures Dating

searchnssearch; Www nsearchs Pictures ;searchn Www ssearch;searchnsearchs Dating ;n Picturesdating sp Dating &searchb Picturesdating p Pictures & Pictures bsearchp Pictures &n Pictures s Www ; Dating n Dating ssearch; Dating nsearchssearch;n Dating P Dating c Dating ue Dating s;searchWsearchw Www nse Www rc Dating s Pictures ;searcheacsearchn searcha Picturesdating in Www Pictures ww Dating sear Www hs Www asearchc Picturesdating sPicsearchu Www esearch ; Dating Picsearchure Pictures n Picturesdating earc Dating sp Psearchct Picturesdating re Pictures &s Www a Dating c Picturesdating b Ww Pictures Www Dating ictsearchre Picturesdating & searchit Www rsearchsdatsearchnsearch search Pisearcht Dating researchdat Www n Pictures p Www nsearchs Www ;nsearchs Pictures ; Picturesdating n Dating s Picturesdating ;n Www sp Dating &b Picturesdating p;& Picturesdating b Dating p Www & Pictures bp&searchb Dating p Pictures & Dating b Www p Dating & Www bp;ns Picturesdating ;n Dating s;searchnsearchs;searchns Dating ;searchnbp; Picturesdating n Picturesdating s Picturesdating ; Pictures n Www s Dating ; Dating nsearchs Www ;&nspsearch&n Pictures sp&bs Dating ;searchn Picturesdating spsearch& Pictures b Pictures psearch&nb Www p;&n Dating s Dating ; 移动业界领袖会议·上海·6.20
第四届云计算大会门票抢购:史上最低价,每日限5张!         【分享季1】:网友推荐130个经典资源,分享再赠分!

[置顶] 一亿数据获取前100个最大值(利用quicksort的原理实现) [# 70]

分类: 算法 (Algorithm) Done 362人阅读 评论(13) 收藏 举报

前言:

刚刚在CSDN上看到一个网友利用最小堆实现 “ 获取一亿数据获取前100个最大值” 。原帖请看:yjflinchong/article/details/7533972。 然后自己利用quicksort的原理也写了一个程序来解决那个问题。通过测试,基于quicksort原理的方法平均运行时间是1.264秒,基于最小堆方法的平均运行时间是0.288秒 (网友写的程序运行时间比我的大很多,0.288秒这个程序是我自己写的,如果测试网友写的基于minHeap的方法,运行时间是2.501秒)。基于最小堆方法运行时间很稳定(每次运行时间相差很小),基于quicksort原理的方法运行时间不稳定(每次运行时间相差大)。

基于quicksort实现的原理如下:

1. 假设数组为 array[N] (N = 1 亿),首先利用quicksort的原理把array分成两个部分,左边部分比 array[N - 1] (array中的最后一个值,即pivot) 大, 右边部分比pivot 小。然后,可以得到 array[array.length - 1] (即 pivot) 在整个数组中的位置,假设是 k.
2. 如果 k 比 99 大,原数组变成了 array [0, ...  k - 1], 然后在数组里找前 100 最大值。 (继续递归)
3. 如果 k 比 99 小, 原数组变成了 array [k + 1, ..., N ], 然后在数组里找前 100 - (k + 1) 最大值。(继续递归)
4. 如果 k == 99, 那么数组的前 100 个值一定是最大的。(退出)

代码如下:

下面是基于minHeap写的程序。如果你懂heap sort,那么下面的程序很容易理解。


时间复杂度分析:

基于minheap方法 的时间复杂度是 O(lg K * N), 基于quicksort 方法的平均时间复杂度是 O(N),但是最差是O(N^2). 这也是为何基于quicksort 方法它的时间不稳定的原因。

转载请注明出处:beiyeqingteng.



2
0
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料

    beiyeqingteng
    • 访问:21265次
    • 积分:1078分
    • 排名:第6115名
    • 原创:81篇
    • 转载:21篇
    • 译文:0篇
    • 评论:43条
    文章搜索
    文章分类
    文章存档
    阅读排行
    评论排行
jPictures Dating Www Picturesdating Pictures Dating 一亿数据获取前100个最大值(利用quicksort的原理实现) [# 70] - Yuwen's Hero - 博客频道 - CSDN.NETz a Women Slave fPictures Dating Www Picturesdating Pictures Dating 一亿数据获取前100个最大值(利用quicksort的原理实现) [# 70] - Yuwen's Hero - 博客频道 - CSDN.NETz j Pictures Dating