快速排序(分治)

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













發佈了74 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章