2013计算机硕士统考试题分析 - 数据结构

题干
在这里插入图片描述
思路解析:遍历数组元素,标记出一个可以成为主元素的元素Num,然后重新计数,确认Num是否是主元素
算法分为两步:① 选取候选的主元素过程:依次遍历所给数组的每个整数,将第一个遇到的整数Num保存到c中,记录Num出现的次数为1,若下一次遇到的整数仍然为Num,则计数加1,否则减1;当计数减到0的时候,重新选取新的Num为c,并且重新开始计数,直到遍历完全部元素
② 判断c的元素是否可以成为真正的主元素:扫描原来的数组,统计c出现的次数,如果大于n/2,有主元素,否则,不存在主元素。

int Majority(int A[],int n)
	int i,c,count=1;				//计数器count,候选主元素c
	c=A[0]							//把数组第一个元素记作第一个候选主元素,此时c=A[0],如果后面的元素与之相等,进行累加1,否则减1;当计数器为0时候,把当前遍历的元素记作候选元素
	for (i=1;i<n;i++)				//遍历整个数组
		if (A[i] == c)				//和后面元素比较
			count++;				//相等计数器加1
		else
			if (count>0)			//否则,计数器减1(前提是计数器不为0),计数器为0时候,要重新开始计数,count置1
				count--;
			else{					//计数器为0时候,要重新开始计数,count置1,候选元素重置
				c=A[i];
				count=1;
				}
	if (count>0)					//存在候选元素
	for (i=count=0;i<n;i++)			//遍历原来数组,并计算候选元素在原来数组中出现的次数
		if(A[i] == c)
			count++;
	if (count>n/2) return c;		//次数大于一半表长,返回主元素
	else return -1;					//否则返回-1
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值