• PAT 基础编程题 4-11 求自定类型元素序列的中位数(希尔排序)


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

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

    函数接口定义:

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

    其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回NA[]元素的中位数,其值也必须是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
    ", Median(A, N));
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    3
    12.3 34 -5
    

    输出样例:

    12.30

    学习了一下希尔排序,原地算法之一,每一次二分步长,将步长内可到达的每一个数都视为同一组,再对每一组进行直接插入排序,以前一直以为是两两之间排序,样例都过不了……

    代码:

    ElementType Median( ElementType A[], int N )
    {
        int i,j,gap;
        for (gap=N>>1; gap; gap>>=1)
        {
            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;
                }
            }
        }
        return A[N>>1];
    }
  • 相关阅读:
    20151010 C# 第一篇 变量类型
    20151009 C# 第一篇 程序编写规范
    20151009 C# 第一篇 基础知识
    VS 控件命名规范
    Replace Pioneer 续用2
    bcb安装控件方法汇总
    Unresolved external 'LresultFromObject'
    Form居中显示
    C++Builder 中 Enter键或者Tab键无效
    解决Ubuntu鼠标右键无反应
  • 原文地址:https://www.cnblogs.com/Blackops/p/5863630.html
Copyright © 2020-2023  润新知