hdu 1425:sort

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
 
思路:用快排函数,快排函数的手写函数有点子烦啊,这里千万要注意用cin/cout就超时!!!!!!
#include<cstdio>
#include<iostream>
#include<functional>
#include<algorithm>
using namespace std;
int a[1000005];
int cmp(const void* a, const void* b)
{
    return *(int*)b - *(int*)a;
}
int main()
{
    int n, k; 
    while (~scanf("%d%d", &n, &k)){
        for (int i = 0; i < n; i++)
            scanf("%d", &a[i]);
            //cin >> a[i];

        qsort(a, n, sizeof(int), cmp);
        //sort(a, a + n, greater<int>());
        for (int i = 0; i < k; i++)
        {
            if (i != k - 1)
                printf("%d ", a[i]);
            else printf("%d\n", a[i]);
            //if (i == 0)cout << a[i];
            //else cout << " " << a[i];
        }
        //cout << endl;
    }
    
    return 0;
}

 

 注意一下快排函数中cmp的写法:

  • 结构体
struct array 
{
    int x;
    int y;
}arr[1000];

int cmp(const void *a , const void *b) 
{ 
    return ((array *)a)->x - ((array *)b)->x;
} 

qsort(arr,1000,sizeof(arr[0]),cmp); 

 

posted @ 2018-04-13 11:51  我只有一件白T恤  阅读(127)  评论(0编辑  收藏  举报