摘要:
前一篇寻找第k小的数可以用来处理大量数据,这里介绍的堆排序也可以用来处理大量数据的情况,而且堆排序的思想还可以找出前k小的数据(自然也可以找出前k大的数据,就看是建立大根或者小根堆了),只需要建立k个数据的堆就行了,然后依次把后面的数据放入到堆中的适当位置。这里只是实现了堆排序(并没有实现找出前k小的数)。#include <iostream>#include <algorithm>#include <ctime>#include <cstdlib>#include <iterator>using namespace std;cons 阅读全文
posted @ 2012-05-04 19:25
KingsLanding
阅读(273)
评论(0)
推荐(0)
摘要:
使用快排中的partition方法,可以很快找到一个无序序列中的第k小的数。思想:对于一个数组a[0...n-1],分段成a[0...st-1],a[s],a[st+1...n-1]分组后,a[0...st-1]里面的元素都小于等于a[st],a[st+1...n-1]里面的元素都大于等于a[st]. 所以,如果 st==k-1,那么a[st]就是要求的数。如果 st>k-1,那么要求的数在a[0...st-1]里。 如果 st<k-1,那么要求的数在a[st+1...n-1]里。因此我们把范围缩小到 a[0...st-1]或者a[st+1...n-1]里,然后对缩小范围后的数组也 阅读全文
posted @ 2012-05-04 19:17
KingsLanding
阅读(301)
评论(0)
推荐(0)
浙公网安备 33010602011771号