本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType。
函数接口定义:
ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &A[i]);
printf("%.2f\n", Median(A, N));
return 0;
}
/* 你的代码将被嵌在这里 */
int getmid(int left,int right,ElementType *A)
{
int mid=left+(right-left)/2;
if(*(A+mid)>*(A+left)){
if(*(A+mid)<*(A+right)){
return mid;
}else{
return right;
}
}else{
return left;
}
}
void quicksort(int left,int right,ElementType *A)
{
if(left>=right)
return;
int i=left,j=right;
ElementType temp=*(A+getmid(left,right,A));
*(A+getmid(left,right,A))=*(A+left);
*(A+left)=temp;
ElementType t;
while(i!=j){
while(*(A+j)<=temp&&i<j)
j--;
while(*(A+i)>=temp&&i<j)
i++;
if(i<j){
t=*(A+i);
*(A+i)=*(A+j);
*(A+j)=t;
}
}
*(A+left)=*(A+i);
*(A+i)=temp;
quicksort(left,i-1,A);
quicksort(i+1,right,A);
}
ElementType Median(ElementType A[],int N)
{
quicksort(0,N-1,A);
return A[(N+1)/2-1];
}
你好, 请把你的程序贴到 ‘代码块’ 里面。 这样大家才好帮你。