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