快速排序法经典题型
排序练习——找出前m大的数字
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定n个数字,找出前m大的数字。
输入
多组输入,每组输入格式如下。
第一行包含两个整数n m。(n<=100000, m>0)
第二行包含n个正整数。
输出
输出前m大的数字,若m>n输出ERROR。每组输出占一行。
示例输入
2 1 4 3 4 2 1 2 898989 23
示例输出
4 898989 23
提示
1 #include<stdio.h> 2 void qsort(int a[],int l,int r) 3 { 4 int x=a[l],i=l,j=r; 5 if(l>=r)return ; 6 while(i<j) 7 { 8 while(i<j&&a[j]>=x)j--; 9 a[i]=a[j]; 10 while(i<j&&a[i]<=x)i++; 11 a[j]=a[i]; 12 } 13 a[i]=x; 14 qsort(a,l,i-1); 15 qsort(a,i+1,r); 16 } 17 int main() 18 { 19 int m,n; 20 while(scanf("%d%d",&m,&n)!=EOF) 21 { 22 int f[100005],i; 23 for(i=0;i<=m-1;i++) 24 scanf("%d",&f[i]); 25 qsort(f,0,m-1); 26 if(n>m) 27 { 28 printf("ERROR\n"); 29 continue; 30 } 31 for(i=m-1;i>=m-n;i--) 32 { 33 if(i==m-1)printf("%d",f[i]); 34 else printf(" %d",f[i]); 35 } 36 printf("\n"); 37 } 38 return 0; 39 }