虽然不排序,这这两种方法都源于经典的排序算法的扩展
方式一,快速排序的扩展
/************************************************************************/
/*找到无序数组中最大的k个数 */
/************************************************************************/
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
//找到一个位置,使得左边的数比它大,右边的数比他小
int Partion(int arr[],int start,int end)
{
int i=start,j=end;
int temp=arr[start];
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=Partion(arr,start,end);
if(p>k)
{
FindK(arr,start,p-1,k);
}
else
if(p<k)
{
FindK(arr,p+1,end,k-p);
}
}
}
int *Create(int n)
{
int *p=new i