http://blog.csdn.net/shouhuqi/article/details/8024815
上面链接里面给出了两种不排序的top k选择方法,其中第一种经测试多出有问题。下面是改正后的代码,也许还有错误,希望大伙儿能够指出来;
1 串行
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
partition(int arr[], int start, int end)
{
int i=start, j=end;
int temp = arr[i];
while(i < j)
{
while((i<j) && (arr[j] <= temp)) j--;
arr[i] = arr[j];
while((i<j) && (arr[i] >= temp)) i++;
arr[j] = arr[i];
}
arr[i] = temp;
return i;
}
void
findk(int arr[], int start, int end, int k)
{
if (start < end)
{
int p = partition(arr, start, end);
if ((p - start) > k)
{
findk(arr, start, p - 1, k);
}
else if ((p - start) == 0)
{
fi