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


你可能感兴趣的:(快速排序,交换排序,OpenJudge,内排序,寻找中位数)