描述
给定一个数组,统计前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
限制
时间限制: 1000 ms
内存限制: 65536 KB
看完题目的第一思路是直接用sort排序,然后输出前k大的数,但看了下n<100000,,我就知道肯定会超时的,那就不能用裸快排,需有一点变动,因为这点变动,使它的时间复杂度更小。利用快排的思想,当排完一次后,右边的数等于k,则表示找到这k个数,然后结束快排,再使用sort排序……
#include <bits/stdc++.h>
using namespace std;
void quicksort(int a[], int left, int right, int k) {
if (left >= right) return;
int i = left;
int j = right;
int tmp = a[left];
while (i!=j){
while (i<j && a[j] >= tmp)
j--;
swap(a[i