- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计大作业之寻找多数元素
寻找最大元素
一,问题描述:
令A[1…n]是一个整数序列,A中的整数a如果在A中出现的次数多于,那么a称为多数元素。例如,在序列1,3,2,3,3,4,3中,3是多数元素,因为7个元素中它出现的次数为4,大于3。
设计一个性能比较优异的算法求解这个问题。
二,算法描述:
本算法得益于这样一个观察结论:在原序列中去除两个不同的元素以后,原序列中的多数元素在新的序列中还是多数元素。此结论的数学证明省略。
本算法的语言描述如下:将计数器置1,并令c=A[1],从A[2]开始,逐个的扫描元素,如果被扫描的元素和c相等,则计数器加1;若果元素不等于c,则计数器减1;如果所有的元素都已经扫描完毕并且计数器大于0,那么返回c作为多数元素的候选者。如果在c和A[j](1jn)比较时计数器为0,那么对于A[j+1…n]上的元素递归调用candidate过程。
算法如下:
三,程序代码:
# include stdio.h
# include stdlib.h
int candidate(int A[],int m,int n);
int majority (int A[],int n);
int i=1,count,c,j;
void main()
{
int c,num[100],a,n,j;
j=0;n=0;
printf(please input the numbers and use 00 to stop (you can input 100 numbers) \n);
while(1)
{
scanf_s(%d,a);
if (a!=00)
{
num[j]=a;
j=j+1;
n=n+1;
}
else
break;
}
printf(you have inputed %d numbers totally,n);
printf(\nthe numbers you input are as follows\n);
for(j=0;jn;j++)
printf(%5d,num[j]);
c=majority (num,n);
if (c!=0)
printf(\nand the most number is %d \n,c);
else
printf(\nbut the most number is not exsited);
system(PAUSE);
}
int candidate(int A[],int m,int n)
{
c=A[m];
count=1;
for(j=m+1;jncount0;j++)
{
if(A[j]==c)
count++;
else
count--;
}
if (j==n)
return c;
else
return candidate(A,j+1,n);
}
int majority (int A[],int n)
{
int i;
c=candidate(A,0,n);
for (i=0;in;i++)
if (A[i]==c)
count++;
if (countn/2)
return c;
else
return 0;
}
代码运行结果如下:
(1),没有最大元素的情况
(2)有最大元素的情况
四,递归过程展示:
candidate(1)
j=1,c=A[1]=1,count=1
j=2,A[2]!=c=1,count=0
j=2!=n=10
candidate(3)
j=3,c=A[3]=3,count=1
j=4,A[4]=2!=c=3,count=0
j=4!=n=10
candidate(7)
j=7,c=A[7]=8,count=1
j=8,A[8]=2!=c=8,count
j=8!=n=10
candidate(9)
j=9,c=A[9]=5,count=1
j=10,A[10]=2!=c=5,count=0
j=10=n=10,return c=5
majority:
c=candidate(1)=5
count=0
j=1 to n
count=2
count=25
return none
candidate(1)
j=1,c=A[1]=1,count
j=1!=n=11
j=2,A[2]=2!=c=1,count=0
j=2!=n
您可能关注的文档
最近下载
- 考研法律硕士专业基础(法学397)研究生考试2024年模拟试卷与参考答案.docx VIP
- 黑龙江地方课程人文与社会五年级上册教案.pdf
- 电解质代谢紊乱护理查房ppt课件.pptx
- 第五章 信号调理电路.ppt
- 中小学教师数据素养题库及答案(包含期末考试)(1).pdf
- 传递窗紫外灯表面消毒效果验证-嘉和众邦.pdf
- 2025届高考语文一轮复习名篇名句默写基础题训练含答案.doc
- 《中国民间故事》导读.pptx
- 高级供应链管理师职业技能鉴定考试题库资料(含答案).pdf
- IEEE Std 1936.1-2021 IEEE Standard for Drone Applicatons Framework.人机应用框架标准.pdf
文档评论(0)