标题:如何用c++语言求一组数据的中位数
只看楼主
linkui0801
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-12-4
结帖率:25%
已结贴  问题点数:5 回复次数:10 
如何用c++语言求一组数据的中位数
Description

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


Input
 

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


Output
 

 输出一个中位数,结尾有一个换行符。
 
Sample Input
搜索更多相关主题的帖子: 中位数 换行符 如何 
2012-12-31 16:28
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
得分:1 
这个 算法 利用C++库  就行么?
2012-12-31 18:08
张海锋
Rank: 2
等 级:论坛游民
帖 子:52
专家分:37
注 册:2012-12-8
得分:1 
使用数组的吗?如果是的话就是这样吧
先对他们进行排序然后输出n/2-1的那个数组元素吧

2012-12-31 23:39
张海锋
Rank: 2
等 级:论坛游民
帖 子:52
专家分:37
注 册:2012-12-8
得分:0 
不好意思没看清题目

2012-12-31 23:40
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
得分:1 
#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;
}
//写了了一个用的是二分排序,是数据结构的,难得看的话就用冒泡或者选择排序也行,排序方法太多了。排好序输出中间的那个元素,楼主看看满足题意不。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-01-01 20:06
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
得分:1 
就是排序+输出第n/2+1个数吧。。。

去追寻更高的技术领域。永不停止。
2013-01-01 22:55
linkui0801
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-12-4
得分:0 
其实呢,,,我同学想出一个非常简单的程序。。。。。。。。。。。。
2013-01-02 10:23
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
得分:0 
简单就好。我是想省事,复制粘贴了下以前写的排序模板,是写成函数的。你同学排序了没?主函数里排的?想知道怎么个简单法,学习下以后也用用。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-01-02 12:31
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:1 
不用排序,用双层循环,内循环中让其中一个数与其他数比较,若小于其他数总次数是n/2时,此数即是中位数。

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

[ 本帖最后由 qunxingw 于 2013-2-23 10:18 编辑 ]

www.qunxingw.wang
2013-01-03 13:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
“将这些数按大小顺序排列,然后将其中位于正中间位置的数输出到屏幕上。”
------ 这个题目奇怪的地方是,只要求输出中位数,但题目中又要求全排序。估计出题者的算法课是体育老师教的。
2013-01-04 08:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-394669-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.146219 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved