AC代码:sort
Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 45396 Accepted Submission(s): 13121

Problem 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

#include <stdio.h>
long long a[1000002];
long long num1,num2;
void swap(long long *m,long long *n){
    int temp;
    temp=*m;
    *m=*n;
    *n=temp;    
}
void quicksort(long long left,long long right){
    long long i,j,temp,t;
    if (left > right)
    return ;

    temp=a[left];
    i=left;
    j=right;
    while (i!=j){
        while (a[j]>=temp && i<j)
        j--;
        while (a[i]<=temp && i<j)
        i++;

        if (i<j)
        swap(&a[i],&a[j]);    

    }
    a[left]=a[i];
    a[i]=temp;
    quicksort(left,i-1);
    quicksort(i+1,right);

}

int main (){

    while (~scanf("%lld%lld",&num1,&num2)){    
    int i;
    for (i=1;i<=num1;i++)
        scanf("%lld",&a[i]);
        quicksort(1,num1);

        while (num2--){
            if (num2==0) printf("%lld\n",a[num1]);
            else printf("%lld ",a[num1--]);
        }
    }
    //    printf("%lld ",a[num1--]);    
    return 0;
} 

注意最后打印的格式