快速排序(分治)

来源:互联网 发布:唯美画面知乎 编辑:程序博客网 时间:2024/06/04 19:49

1:输出前k大的数

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

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

输入
第一行包含一个整数n,表示数组的大小。n < 100000。
第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。
第三行包含一个整数k。k < n。
输出
从大到小输出前k大的数,每个数一行。
样例输入
104 5 6 9 8 7 1 2 3 05
样例输出
98765






源代码

#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; } 













原创粉丝点击