本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType

函数接口定义:

  1. ElementType Median( ElementType A[], int N );

其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回NA[]元素的中位数,其值也必须是ElementType类型。

裁判测试程序样例:

  1. #include <stdio.h>
  2. #define MAXN 10
  3. typedef float ElementType;
  4. ElementType Median( ElementType A[], int N );
  5. int main ()
  6. {
  7. ElementType A[MAXN];
  8. int N, i;
  9. scanf("%d", &N);
  10. for ( i=0; i<N; i++ )
  11. scanf("%f", &A[i]);
  12. printf("%.2f\n", Median(A, N));
  13. return 0;
  14. }
  15. /* 你的代码将被嵌在这里 */

输入样例:

  1. 3
  2. 12.3 34 -5

输出样例:

  1. 12.30
  1. ElementType Median( ElementType A[], int N ){
  2. //本来打算冒泡排序然后直接输出 结果超时了
  3. //题目本意是希尔排序 ShellSort 重来
  4. //插入排序
  5. int i,j;
  6. int dk;//步长
  7. ElementType temp;
  8. for(dk=N/2; dk>0; dk/=2){//步长折半
  9. for(i=dk; i<N; i++){//直接插入排序
  10. for(j=i-dk; j>=0&&A[j]>A[j+dk]; j-=dk){
  11. temp = A[j];
  12. A[j] = A[j+dk];
  13. A[j+dk] = temp;
  14. }
  15. }
  16. }
  17. return A[N/2];
  18. }