6-11 求自定類型元素序列的中位數(25 分)
阿新 • • 發佈:2018-07-07
\n 相關 n) 以及 std turn clu i++ 測試
6-11
6-11 求自定類型元素序列的中位數(25 分)
本題要求實現一個函數,求N
個集合元素A[]
的中位數,即序列中第?N/2+1?大的元素。其中集合元素的類型為自定義的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; } /* 你的代碼將被嵌在這裏 */
輸入樣例:
3
12.3 34 -5
輸出樣例:
12.30
AC代碼
ElementType Median( ElementType A[], int N ){ int i,j,gap; for(gap=N/2;gap>0;gap/=2){ for(i=gap;i<N;i++) for(j=i-gap; j>=0 && A[j]>A[j+gap] ; j-=gap) { ElementType temp=A[j]; A[j]=A[j+gap]; A[j+gap]=temp;//結構對應,插入排序來的 } } /* for(int i=0;i<N;i++){ printf("%.2f",A[i]) ; }*/ if( N%2 !=0){ if(N==1) return A[0]; int xu=N/2+0.5;//序列中第?N/2+1?大的元素 return A[xu]; } else { ElementType m=A[N/2]; return m; } }
相關思考
主要使用了插入排序,以及int xu=N/2+0.5;//序列中第?N/2+1?大的元素
6-11 求自定類型元素序列的中位數(25 分)