C语言 如何编个程序求一组数的中位数和众数

请问如何将数组排序呢。。不好意思,我是新手,前2天刚学完指针。。那个移动指针是啥意思... 请问如何将数组排序呢。。不好意思,我是新手,前2天刚学完指针。。那个移动指针是啥意思 展开
 我来答
子爵先生
推荐于2017-12-15 · TA获得超过1675个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:571万
展开全部
数组排序可以不用指针。你把数组定义成全局变量,比如说a[10001];然后调用我给你的快排程序就行了,这个程序可以背下来,很有用的。
void qs(int L,int R)
{
int i=L,j=R,mid=a[(L+R)/2],t;
while(i<j)
{
while(a[i]<mid) ++i;
while(a[j]>mid) --j;
if(i<=j)
{
t=a[i]; a[i]=a[j]; a[j]=t;
++i; --j;
}
}

if(i<R) qs(i,R);
if(L<j) qs(L,j);
}
排好序之后找中位数就好办了。
至于众数,我觉得最好的方法是用bfs。但这个对你来说难度有点大,我就给你写一个hash表吧。还用上面的那个数组,且假定数组a中的最大值不超过10000,若超过,你把下面这个hash数组的范围扩大就行了。
另外,设a中有n个元素,a从1开始计数(若从0开始,你改一下就好了)
int hash[10001]={0};
int i,Max=0;
for(i=1; i<=n; ++i)
{
++hash[a[i]];
if(hash[a[i]]>hash[Max]) Max=a[i];
}
最后输出Max就好了

刚t415422663倒是提醒我了,如果要判断众数有多个,我可以把上面的程序稍改一下
int hash[10001]={0};
int i,Max=-1;/*注意,这里把Max赋值为-1是为了防止数组a的元素个数为0时所有数据都被输出*/
for(i=1; i<=n; ++i)
{
++hash[a[i]];
if(hash[a[i]]>Max]) Max=hash[a[i]];
}
//10000是数组a中可能出现的最大值,这个你可以自己改的
for(i=1; i<=10000; ++i)
if(hash[i]==Max) printf("%d\n",i);
17450957
2010-10-23
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
单数的数据先按一定的顺 排列,最中间的一个数就是中位数。双数的数据先按一定的顺 排列,最中间的两个数的平均数就是中位数。众数就是一个数组中出现最多的数,可以没有,也可以有多个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
boremy
2010-10-23 · TA获得超过770个赞
知道小有建树答主
回答量:1062
采纳率:0%
帮助的人:593万
展开全部
先将数组排序,然后第(N+1)/2个就是中位数。
众数就是一个数组中出现最多的数,可以没有,也可以有多个,这个要想想
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
t415422663
2010-10-23 · TA获得超过437个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:219万
展开全部
楼上的正确,众数不好弄,如果只有一个还好,多个的话,还得想想才能写程序,中位数,你先按照从大到小或者从小到大排序就可以了,(n+1)/2那个数就是了 .
排序,一般书上都有冒泡排序之类的算法,你去查一下吧,这些都是基础啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猫咪爱塔防
2010-10-23 · 超过10用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:33.6万
展开全部
中位数就是(n+1)/2;众数就是数组中最多的那个数
有很多方法可以求众数
(1):先排序,然后不停移动数组比较看值相同的元素那个多
(2):可以做个指针,不停移动,设立变量 a b c d等遇到值相同的变量就增1;例如:值是2的,b++,值是4的 d++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式