PTA 6-11 求自定类型元素序列的中位数 (25 分)

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

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

【PTA 6-11 求自定类型元素序列的中位数 (25 分)】其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回NA[]元素的中位数,其值也必须是ElementType类型。
裁判测试程序样例:
#include #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

输入样例:
3 12.3 34 -5

输出样例:
12.30

做法一
使用希尔排序(for)
ElementType Median( ElementType A[], int N ) {ElementType temp; for (int gap = N / 2; gap > 0; gap /= 2) {for (int i = gap; i < N; i++) {for (int j = i - gap; j >= 0 && A[j] > A[j+gap] ; j-=gap) {temp = A[j]; A[j] = A[j+gap]; A[j+gap] = temp; }}}return A[N/2]; }

(18条消息) 6-11 求自定类型元素序列的中位数 (25 分)_LIQIANDI的博客-CSDN博客
做法二
使用希尔排序(while)
ElementType Median( ElementType A[], int N ) {ElementType temp; for (int gap = N / 2; gap > 0; gap /= 2) {for (int i = gap; i < N; i++) {int j = i; temp = A[j]; while (j - gap >= 0 && A[j-gap] > temp) {A[j] = A[j-gap]; A[j-gap] = temp; j -= gap; }}}return A[N/2]; }

希尔排序就这么简单 - SegmentFault 思否

    推荐阅读