快速排序法经典题型

排序练习——找出前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
");
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("
");
37     }
38     return 0;
39 }
View Code
原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3191760.html