给定一个数组,统计前k大的数并把前k大的数从小到大输出来。
输入:
10
4 5 6 9 8 7 1 2 3 0
5
输出:
9
8
7
6
5
程序代码:
#include <iostream>
using namespace std;
int js(int,int);
int a[100001];
int main(){
int n,k;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
js(1,n);
cin>>k;
for(int i=1;i<=k;i++){
cout<<a[i]<<endl;
}
return 0;
}
int js(int l,int r){ //快速排序,也可以用sort()函数代替
int i,j,mid;
i=l;
j=r;
mid=a[(l+r)/2];
do{
while(a[i]>mid) i++;
while(a[j]<mid) j--;
if(i<=j){
int t;
t=a[i];a[i]=a[j];a[j]=t;
i++;
j--;
}
} while(i<=j);
if(l<j) js(l,j);
if(r>j) js(i,r);
return 0;
}