5 2 4 1 3 5
3HintINPUT DETAILS: Five cows with milk outputs of 1..5 OUTPUT DETAILS: 1 and 2 are below 3; 4 and 5 are above 3.
就是奇数个数字,求中位数,排序下,即可
#include<iostream>
#include<stdio.h>
#include<string.h>
int a[10010];
using namespace std;
void Swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
int partition(int a[],int l,int h){
int v = a[l];
int i=l;
int j=h+1;
while(true){
while(a[++i]<v)if(i==h)break;
while(v<a[--j])if(j==l)break;
if(i>=j)break;
Swap(&a[i],&a[j]);
}
Swap(&a[l],&a[j]);
return j;
}
void quick_sort(int a[],int l,int h){
if(h<=l)return ;
int j=partition(a,l,h);
quick_sort(a,l,j-1);//左边
quick_sort(a,j+1,h);//右边
}
int main(int argc, char *argv[])
{
//freopen("1157.in","r",stdin);
int N;
int i;
while(scanf("%d",&N)!=EOF)
{
i=0;
for(i=0;i<N;++i)
scanf("%d",&a[i]);
quick_sort(a, 0, N-1);
printf("%d\n",a[N/2]);
}
return 0;
}
注意事项:partition一定要有返回值!!!别糊涂了,此外,partition确定后,排前面的,和后面的即可,即j-1,j+1HDU 1157 Who's in the Middle (快速排序 or 任意排序)
原文:http://blog.csdn.net/wdkirchhoff/article/details/41865579