算法导论 练习题 9.3-7

来源:互联网 发布:尚观linux培训 骗局 编辑:程序博客网 时间:2024/05/17 23:14
#include <stdio.h>#include <stdlib.h>#include <limits.h>#define LEN 10void 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);elsereturn 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();}

0 0
原创粉丝点击