在n个数字中找到前m大个数字:
#include <stdio.h>
int find(int a[],int m,int start,int end);
ind swap(int a[],int i,int j);
int main(void)
{
int a[]={3,2,321,654,65,45,234,233,432,6234};
//找到第m大的数字,采用快排的方法
int m = find(a,3,0,10);
printf("the Max M numbers is :");
int i=0;
for(i;i<10;i++)
{
if(a[i] > m)
{
printf("%d ",a[i]);
}
}
}
int find(int a[],int m,int start,int end)
{
if(start < end)
{
int midValue = so[start];
int i = start;
int j = end+1;
while(true)
{
while(i<end && a[++i] <= midValue);
while(j>start && a[--j] >= midValue);
if(i < j)
{
swap(a,i,j);
}
else
{
break;
}
}
swap(a,start,j);
int p = j-1-start<0 ? 1:(j-start);
if(p >= m)
{
return find(a,m,start,j-1);
}
else if(p + 1 == m)
{
return a[j];
}
else
{
return find(a,m-1-p,j+1,end);
}
}
}
ind swap(int a[],int i,int j)
{
int t = a[i];
a[i] = a[j]
a[j] = t;
}