您的位置:首页 > 其它

快速排序(分治)

2017-08-13 16:28 253 查看

1:输出前k大的数

总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述

给定一个数组,统计前k大的数并且把这k个数从大到小输出。

输入第一行包含一个整数n,表示数组的大小。n < 100000。

第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。

第三行包含一个整数k。k < n。
输出从大到小输出前k大的数,每个数一行。
样例输入
10
4 5 6 9 8 7 1 2 3 0
5


样例输出
9
8
7
6
5



源代码

#include<stdio.h>
#include<algorithm>

using namespace std;

void swap(int & a, int & b)
{
int tmp = a;
a = b;
b = tmp;
}

void QuickSort(int a[], int s ,int e)
{
if(s>=e)
return ;
int k=a[s];
int i=s , j=e;
while(i!=j)
{
while(i < j && a[j] >= k )
j--;
swap(a[i] , a[j]);
while(i < j && a[i] <= k)
i++;
swap(a[i] , a[j]);
}
QuickSort(a , s , i-1);
QuickSort(a , i+1 , e);
}

int main()
{
int a[100005];
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
QuickSort(a, 0, n-1);
int m;
scanf("%d",&m);
for(int j=n-1 ; j>n-m-1 ; j--)
printf("%d\n",a[j]);

return 0;
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: