#include<stdio.h>
#include<stdlib.h>
int partition(int *a,int l,int r)
{
int i=l-1;
int j=r,temp;
int x=a[r];
while(1)
{
while(a[++i]<x);
while(x<a[--j])
if(j==l)
break;
if(i>=j)
break;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
temp=a[i];
a[i]=a[r];
a[r]=temp;
return i;
}
int getMax(int *a,int l,int r,int k)
{
int i;
if(r<=l)
return a[l];
i=partition(a,l,r);
if(i==(k-1))
return a[i];
else
if(i>=k)
return getMax(a,l,i-1,k);
else
return getMax(a,i+1,r,k);
}
int main()
{
int i,n,a[10000+16];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("%d\n",getMax(a,0,n-1,n/2+1));
}
算法: 快速求中位数(第k大数)
最新推荐文章于 2025-01-28 00:15:00 发布