openjudge 尋找中位數

這是題目:

2:尋找中位數
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
在N(1<=N<10,000且N爲奇數)個數中,找到中位數。

輸入
第1行:N

第2至N+1行:每行是一個整數
輸出
第一行:中位數
樣例輸入
5
2
4
1
3
5
樣例輸出
3


===========================================================================

這...沒什麼好說的,快速排序函數,必須對快排函數十分熟練才行。


代碼清單:

#include <iostream>
#include <cstdio>
using namespace std;

#define MAXN 10000

void quickSort(int arr[], int m, int n)
{
	int pivot=arr[(m+n)/2];
	int i=m;
	int j=n;
	int temp;

	do 
	{
		while(arr[j]>pivot && j>m)	--j;
		while(arr[i]<pivot && i<n)	++i;

		if (i<=j)
		{
			temp=arr[j];
			arr[j]=arr[i];
			arr[i]=temp;

			--j;
			++i;
		}
	} while (i<=j);

	if(i<n)	quickSort(arr, i, n);
	if(j>m)	quickSort(arr, m, j);
}

int main()
{
	freopen("D:\\in.txt", "r", stdin);  
	freopen("D:\\out.txt", "w", stdout);  

	int n;
	int a[MAXN];

	scanf("%d", &n);
	for (int i=0; i<n; ++i)
		scanf("%d", &a[i]);

	quickSort(a, 0, n-1);

	printf("%d", a[n/2]);

	return 0;
}


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