sort
Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
5 3 3 -35 92 213 -644
Sample Output
213 92 3
Hint
Hint
请用VC/VC++提交
#include<stdio.h>
int s[1000000];
int adjust(int s[], int l, int r) {
int i = l, j = r;
int x = s[l];
while(i < j){
while(i < j && s[j] >= x ) j--;
if(i < j) {
s[i] = s[j];
i++;
}
while(i < j && s[i] < x ) i++;
if(i < j){
s[j] = s[i];
j--;
}
}
s[i] = x;
return i;
}
void qsort(int s[], int l, int r) {
if(l < r){
int i = adjust(s, l, r);
qsort(s, l, i-1);
qsort(s, i+1, r);
}
}
int main(){
int n, m;
while(~scanf("%d%d", &n, &m)){
for(int i=0; i<n; i++) scanf("%d", &s[i]);
qsort(s, 0, n-1);
for(int i=n-1; i>=n-m; i--)
i==n-1? printf("%d", s[i]) : printf(" %d", s[i]);
printf("
");
}
return 0;
}