分治法,排列(l,r),找到指定元素的最终位置key(左边均小于key,右边均大于key),然后递归(l,key-1),(key+1,r)
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define T 1000000
#define INF 999999
int n,a[T],b[T];
//快速排序
void qsort(int *a,int l,int r)
{
if(l>=r) return ;
int key=l,x=l,y=r;
while(x<y)
{
while(y>x)
{
if(a[key]>a[y])
{
swap(a[key],a[y]);
key=y;
break;
}
y--;
}
while(y>x)
{
if(a[key]<a[x])
{
swap(a[key],a[x]);
key=x;
break;
}
x++;
}
}
qsort(a,l,key-1);
qsort(a,key+1,r);
return ;
}
int main ()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,0,n-1);
int p=(n+1)/2;
printf("%d\n",a[p-1]);
}
return 0;
}