数据结构实验之排序四:寻找大富翁
Time Limit: 150ms Memory limit: 512K 有疑问?点这里^_^
题目描述
2015胡润全球财富榜调查显示,个人资产在1000万以上的高净值人群达到200万人,假设给出N个人的个人资产值,请你快速找出排前M位的大富翁。
输入
首先输入两个正整数N( N ≤ 10^6)和M(M ≤ 10),其中N为总人数,M为需要找出的大富翁数目,接下来给出N个人的个人资产,以万元为单位,个人资产数字为正整数,数字间以空格分隔。
输出
一行数据,按降序输出资产排前M位的大富翁的个人资产值,数字间以空格分隔,行末不得有多余空格。
示例输入
6 3 12 6 56 23 188 60
示例输出
188 60 56
提示
显示超时,暂时没有找到错误
#include <stdio.h>
#include <stdlib.h>
int a[10000001];
void qsort(int l,int r)
{
int ke=a[l];
int i=l;
int j=r;
if(l>r) return;
while(i<j)
{
while(i<j && a[j]>=ke) j--;
a[i]=a[j];
while(i<j && a[i]<=ke) i++;
a[j]=a[i];
}
a[i]=ke;
qsort(l,i-1);
qsort(i+1,r);
}
int main()
{
int n;
int m;
int i;
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(0,n-1);
for(i=n-1;i>=m;i--)
{
if(i==0)
printf("%d",a[i]);
else
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}