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

本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊大的元素。其中集合元素的类型为自定义的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

冒泡排序会超时,二分插也会,堆排序可以过。

代码:
ElementType Median( ElementType A[], int N ) {
    int n = N;
    int me = (n + 1) / 2 - 1;
    A[n] = A[0];
    //初始化
    for(int i = n / 2;i > 0;i --) {
        int t = i;
        while(t * 2 < n) {
            int tt = t;
            if(A[tt * 2] > A[t]) {
                t = tt * 2;
            }
            if(tt * 2 + 1 <= n && A[tt * 2 + 1] > A[t]) {
                t = tt * 2 + 1;
            }
            if(t == tt) break;
            ElementType temp = A[tt];
            A[tt] = A[t];
            A[t] = temp;
        }
    }
    //堆排序
    while(me) {
        A[1] = A[n --];
        int t = 1;
        while(t * 2 < n) {
            int tt = t;
            if(A[tt * 2] > A[t]) {
                t = tt * 2;
            }
            if(tt * 2 + 1 <= n && A[tt * 2 + 1] > A[t]) {
                t = tt * 2 + 1;
            }
            if(t == tt) break;
            ElementType temp = A[tt];
            A[tt] = A[t];
            A[t] = temp;
        }
        me --;
    }
    return A[1];
}

原文地址:https://www.cnblogs.com/8023spz/p/12213796.html

时间: 2024-10-29 05:09:08

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

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

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

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