#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define LEN 10
void swop(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int partition(int a[],int p,int r)
{
int i=p-1,x=a[r],j;
for(j=p;j<r;j++)
{
if(a[j]<x)
{
i++;
swop(&a[i],&a[j]);
}
}
swop(&a[r],&a[i+1]);
return i+1;
}
int at(int a[],int p,int r,int i)
{
int q=partition(a,p,r);
int k=q-p+1;
if(i==k)
return a[q];
else if(i<k)
return at(a,p,q-1,i);
else
return at(a,q+1,r,i-k);
}
int main()
{
int k=5;
int a[LEN+1]={INT_MIN,90,4,77,89,23,6,11,45,65,70};
int mid=LEN/2;
int midEl=at(a,1,LEN,mid);
int leftEls=k/2,rightEls=k-k/2,leftPos,rightPos,left,right;
if(mid-1 < leftEls)
{
leftPos=1;
rightEls=k-mid+1;
rightPos=at(a,mid+1,LEN,mid+rightEls);
}
else
{
leftPos=mid-leftEls;
left=at(a,1,LEN,leftPos);
if(LEN-mid<rightEls)
rightPos=LEN;
else
{
rightPos=mid+rightEls;
right=at(a,1,LEN,rightPos);
}
}
printf("中位数是:%d\n",midEl);
for(int i=leftPos;i<=rightPos;i++)
{
if(i!=mid)
printf("%d ",a[i]);
}
getchar();
}
算法导论 练习题 9.3-7
最新推荐文章于 2021-11-01 10:00:00 发布