求无序数组中元素出现次数超过数组长度一半的数字.

求无序数组中元素出现次数超过数组长度一半的数字.

首先给出几个"元素出现次数超过数组长度一半"测试数组:

a1[7]={1 ,2, 3 , 5 , 3 , 3  , 3};

a2[5]={5, 3, 5, 5, 1};

a3[9]={8 ,5 ,6 ,5 ,4 ,2 ,5 ,5 ,1};

不难发现:

   数组中如果一个数字出现次数超过数字长度的一半.如果把这个数组排序,那么排序后的数组中间的数字一定是出现次数超过数字长度的一半.

   如数组a1长度为7,按从小到大排序后为a1[7]={1,2,3,3,3,3,5},此时数组中间的数字a[7/2]=2就是要找的数字.

   如数组a2长度为5,按从小到大排序后为a2[5]={1,3,5,5,5},此时数组中间的数字a[5/2]=5就是要找的数字.

   如数组a3长度为9,按从小到大排序后为a3[9]={1,2,4,5,5,5,5,6,8},此时数组中间的数字a[9/2]=5就是要找的数字.

   

    所以有了以上的发现,我们就可以先随机选择数组中的一个数字,然后进行排序,使比它小的数字位于它左边,使比它大的数字位于它右边.

如果选中的这个数下标恰好是n/2,那么这个数字就是数组的中位数,

如果它的下标大于n/2,那么它的下标大于n/2,那么中位数在它的左边,我们便可以继续在左边递归查找,   

 如果它的下标小于n/2,那么它的下标小于n/2,那么中位数在它的右边,我们便可以继续在右边递归查找.

 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#i
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值