注册 登录
编程论坛 C++教室

如何用c++语言求一组数据的中位数

linkui0801 发布于 2012-12-31 16:28, 8255 次点击
Description

 
 编制一个程序,从键盘输入一系列整数(假设这些整数的值均不超过int型的表示范围,数据数目N不超过10000,且N为奇数,N个整数各不相同)。将这些数按大小顺序排列,然后将其中位于正中间位置的数输出到屏幕上。
 


Input
 

输入分两行,第一行为整数N,第二行是N个整数
 


Output
 

 输出一个中位数,结尾有一个换行符。
 
Sample Input
10 回复
#2
寒风中的细雨2012-12-31 18:08
这个 算法 利用C++库  就行么?
#3
张海锋2012-12-31 23:39
使用数组的吗?如果是的话就是这样吧
先对他们进行排序然后输出n/2-1的那个数组元素吧
#4
张海锋2012-12-31 23:40
不好意思没看清题目
#5
不玩虚的2013-01-01 20:06
#include<iostream>
using namespace std;
template<class Type>
void BinaryIsertSort(Type *array,Type n)
{    Type temprecord;
    int left,right,middle;
    for(int i=1;i<n;i++)
    {temprecord=array[i];
        left=0;
        right=i-1;
        while(left<=right)
        {middle=(left+right)/2;
        if(temprecord<array[middle])
            right=middle-1;
        else left=middle+1;
        }
   
    for(int j=i-1;j>=left;j--)
        array[j+1]=array[j];
    array[left]=temprecord;
    }
}
int main()
{    int n,*a,i;
    cin>>n;
    a=new int [n];
    for( i=0;i<n;i++)
        cin>>a[i];
   
    BinaryIsertSort(a,n);
    for(i=0;i<n;i++)
    {    if(i==(n+0-1)/2)
        cout<<a[i]<<endl;
    }
   
   
    return 0;
}
//写了了一个用的是二分排序,是数据结构的,难得看的话就用冒泡或者选择排序也行,排序方法太多了。排好序输出中间的那个元素,楼主看看满足题意不。
#6
StarFall2013-01-01 22:55
就是排序+输出第n/2+1个数吧。。。
#7
linkui08012013-01-02 10:23
其实呢,,,我同学想出一个非常简单的程序。。。。。。。。。。。。
#8
不玩虚的2013-01-02 12:31
简单就好。我是想省事,复制粘贴了下以前写的排序模板,是写成函数的。你同学排序了没?主函数里排的?想知道怎么个简单法,学习下以后也用用。
#9
qunxingw2013-01-03 13:08
不用排序,用双层循环,内循环中让其中一个数与其他数比较,若小于其他数总次数是n/2时,此数即是中位数。

或: 先找出最大或最小值,再与其他数比较,若比较次数是总数的一半时,也能达到目的。这样可减少复度。[/color][/color]

[ 本帖最后由 qunxingw 于 2013-2-23 10:18 编辑 ]
#10
rjsp2013-01-04 08:40
“将这些数按大小顺序排列,然后将其中位于正中间位置的数输出到屏幕上。”
------ 这个题目奇怪的地方是,只要求输出中位数,但题目中又要求全排序。估计出题者的算法课是体育老师教的。
#11
bighillqb2013-02-22 17:32
学习学习
1