快速排序(分治)
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; }
永远渴望,大智若愚(stay hungry, stay foolish)