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

本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第\lfloor N/2 +1\rfloor?N/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\n", Median(A, N));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

3
12.3 34 -5

输出样例:12.30

解题的过程及感想:
呼,经过好几次的修改,终于改出来了(有点小激动)。这个题目看似简单,实则暗藏陷阱。这个题目的思路很简单:排序,然后返回值。只要排序完成,题目基本上就解决啦。
做这个题目的时候,像我这种对算法不是特别了解的,就只能默默的使用冒泡排序啦,但是老是过不了,显示超时。运用强大的百度,又分别用了快速排序算法和希尔排序算法

快速排序算法(依然显示超时)

void Q_sort(ElementType A[],int N)
{
    int i=0,j=N-1;
    ElementType key = A[0];
    if(N>1)
    {
        while(i<j)
        {
            while(i<j&&A[j]>key)
                j--;
            if(i<j)
                A[i++] = A[j];
            while(i<j&&A[i]<key)
                i++;
            if(i<j)
                A[j--] = A[i];
        }
        A[i] = key;
        Q_sort(A,i);
        Q_sort(A+i+1,N-i-1);
    }
}

希尔排序算法(成功解决问题):

void ShellSort(ElementType a[],int n)
{
    int i,j,dk;
    ElementType tmp;
    for(dk=n/2; dk>0; dk/=2)
        for(i=dk; i<n; i++)
        {
            tmp=a[i];
            for(j=i; j>=dk; j-=dk)
                if(tmp<a[j-dk])
                    a[j]=a[j-dk];
                else break;
            a[j]=tmp;
        }
}
ElementType Median( ElementType A[], int N )
{
    // Q_sort(A,N);
    ShellSort(A,N);
    return A[N/2];
}

排序算法的讲解:http://blog.csdn.net/zhangjikuan/article/details/49095533

时间: 2024-11-05 16:46:46

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

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

本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊大的元素.其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Median( ElementType A[], int N ); 其中给定集合元素存放在数组A[]中,正整数N是数组元素个数.该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型. 裁判测试程序样例: #include <stdio.h> #define MAXN 10 typedef float Ele

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

采用希尔排序 1 #include <stdio.h> 2 3 #define MAXN 10 4 typedef float ElementType; 5 6 ElementType Median( ElementType A[], int N ); 7 8 int main () 9 { 10 ElementType A[MAXN]; 11 int N, i; 12 13 scanf("%d", &N); 14 for ( i=0; i<N; i++ )

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

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

4-5 求自定类型元素的最大值

本题要求实现一个函数,求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Max( ElementType S[], int N ); 其中给定集合元素存放在数组S[]中,正整数N是数组元素个数.该函数须返回N个S[]元素中的最大值,其值也必须是ElementType类型. 裁判测试程序样例: #include <stdio.h> #define MAXN 10 typedef float ElementType; El

4-4 求自定类型元素的平均

本题要求实现一个函数,求N个集合元素S[]的平均值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Average( ElementType S[], int N ); 其中给定集合元素存放在数组S[]中,正整数N是数组元素个数.该函数须返回N个S[]元素的平均值,其值也必须是ElementType类型. 裁判测试程序样例: #include <stdio.h> #define MAXN 10 typedef float ElementType;

4-4 求自定类型元素的平均 (10分)

本题要求实现一个函数,求N个集合元素S[]的平均值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Average( ElementType S[], int N ); 其中给定集合元素存放在数组S[]中,正整数N是数组元素个数.该函数须返回N个S[]元素的平均值,其值也必须是ElementType类型. 裁判测试程序样例: #include <stdio.h> #define MAXN 10 typedef float ElementType;

4-5 求自定类型元素的最大值 (10分)

本题要求实现一个函数,求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Max( ElementType S[], int N ); 其中给定集合元素存放在数组S[]中,正整数N是数组元素个数.该函数须返回N个S[]元素中的最大值,其值也必须是ElementType类型. 裁判测试程序样例: #include <stdio.h> #define MAXN 10 typedef float ElementType; El

7-3 两个有序序列的中位数 (20 分) log n的解法

---恢复内容开始--- 题目描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A?0??,A?1??,?,A?N−1??的中位数指A?(N−1)/2??的值,即第⌊(N+1)/2⌋个数(A?0??为第1个数). 输入格式: 输入分三行.第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数.数字用空格间隔. 输出格式: 在一行中输出两个输入序列的并集序列的中位数. 输入样例1: 5 1 3 5 7 9 2

C++_第七章函数的基本知识_求阶乘的子函数_ 函数参数类型为数组_ 求数组内所有元素和、部分元素和的方法_实现了先从键盘输入到一个数组中,再用for循环取读出数组中的元素 for循环也可以用break来结束循环的

/* 第七章函数的基本知识 */ /*01)c++对于返回值有一定的限制:可以是常量.变量.指针.结构对象或表达式,但不可以是数组02)c++返回数组的方法:将数组作为结构会对象组成部分来返回03)函数遇到return则结束该函数04)如果一个函数的两房额参数类型相同,则必须分别制定每个参数的类型,而不能像声明常规变量那样,将声明组合在一起05)*/ //本代码注意double类型的写法以及double和int类型数据的转换 1 #include <iostream> 2 3 void che