数据l构W五章算法设计题[13]_跨考网
1. 数组 H[ 1Q?/span>1000] 中存攄1000个大不同的正整?/span>;
Q?/span>1Q?/span> 选择一分类法使能最快地得到其中10个最大的敎ͼ要说明理由;
Q?/span>2Q?/span> ~写一E序seek() Q执行该E序Ӟ在命令行中提供二个参敎ͼ
seek a n<enter> 表示需打印H[ ]?/span>n个最大数?/span>
seek I n<enter> 表示需打印H[ ]?/span>n个最数?/span> ?a target="_blank">江大学 1994 ?/span> (18?/span>)?/span>
【参考答案?/span>
Q?/span>1Q在n个正整数中,选出k(k<<mQ个最大的敎ͼ应用堆排序Ҏ(gu)。对深度?/span>h的堆Q筛选算法中关键字的比较ơ数臛_?/span>2Q?/span>h-1Q次。徏堆dq行的关键字比较ơ数不超q?/span>4nQ堆排序在最坏情况下的时间复杂度?/span>O(nlognQ?/span>
int r[1000]; // r[1000]是整型数l?/span>
Q?/span>2Q?/span>void sift(int r[],int k,m,tag)
//已知r[k+1..m]是堆Q本法?/span>r[k..m]调整成堆Q?/span>tag=1建立大根?/span>,tag=2建立根?/span>
{i=k;j=2*i;x=r[k];
while (j<=m)
{if (tag==2) //建立根?/span>
{if (j<m && r[j]>r[j+1]) j++;//沿关键字的方向{?/span>
if(r[j]<x)) {r[i]=r[j];i=j;j=2*i;}
else break;}
else //建立大根?/span>
{if (j<m && r[j]<r[j+1]) j++;//沿关键字的方向{?/span>
if(r[j]>x) {r[i]=r[j];i=j;j=2*i;}
else break;}
}
r[i]=x;
}//sift
main(int argc,char *argv[])
//Ҏ(gu)命o(h)行中的输入,?/span>1000个数中选取n个最大数?/span>n个最数
{int m=1000,i,j;
n=augv[2]; //从命令行输入的第二个参数是需要输出的数的个数
if(n>m){printf(“参数错?/span>\n?/span>);exit(0);}
for(i=0;i<m;i++) scanf(?/span>%d?/span>,&r[i]); //输入1000个大不同的正整?/span>
if (augv[1]==?/span>a?/span>) //输出n个最大数Q要求徏立大根堆
{for(i=m/2;i>0;i--) sift(r,i,m,1)
printf(?/span>%d个最大数依次?/span>\n?/span>,n);
for(i=m;i>m-n+1;i--) //输出n个最大数
{printf(?/span>%5d?/span>,r[i]); j++; if((j+1)%5==0) printf(?/span>\n?/span>);//一行打?/span>5个数
sift(r,1,i-1,1); } //调堆
}
else //(augv[1]==?/span>i?/span>) //输出n个最数Q要求徏立小根堆
{for(i=m/2;i>0;i--) sift(r,i,m,2)
printf(?/span>%d个最数依次?/span>\n?/span>,n);
for(i=m;i>m-n+1;i--) //输出n个最数
{printf(?/span>%5d?/span>,r[i]); j++; if((j+1)%5==0) printf(?/span>\n?/span>);//一行打?/span>5个数
sift(r,1,i-1,2); } //调堆
}
}//main
[法讨论]法讨论了徏堆,q输?/span>nQ?/span>n于{于mQ个最?/span>(?/span>)数的情况Q由于要求输?/span>n个最大数或最数Q必d立极大化堆和极小化堆。注意输出时?/span>for循环控制到变?/span>i?/span>m变化?/span>m-n+1Q这是堆的性质军_的,只有堆顶元素才是最?/span>(?/span>)的。要避免?/span>i?/span>1?/span>n来输?/span>n个最?/span>(?/span>)数的错误?/span>
2022考研初复试已l接q尾壎ͼ考研学子全面q入2023届备?/b>Q跨考ؓ(f)23考研的考生准备?0大课包全E准备、全q复?fn)备考计划、目标院校专业辅对{全真复试模拟练?fn)和全程针对性指|2023考研的小伙伴针也已经开始择校和复习(fn)了,跨考考研畅学5.0版本全新升Q无Z在校在家都可以更自如的完成你的考研复习(fn)Q?/a>暑假集训?/span>带来了院校专业初步选择Q明方向;考研备考全q规划,核心知识点入门;个性化制定备考方案,助你赢在赯U,早出发一点离成功更q一点!
考研院校专业选择和考研复习(fn)计划 | |||
2023备考学?/td> | 2023U上U下随时学习(fn) | 34所自划UK校考研复试分数U汇?/td> | |
2022考研复试最全信息整?/a> | 全国各招生院校考研复试分数U汇?/a> | ||
2023全日制封闭训l?/span> | 全国各招生院校考研调剂信息汇?/a> | ||
2023考研先知 | 考研考试U目有哪些? | 如何正确看待考研分数U? | |
不同院校相同专业如何选择更适合自己?/a> | 从就业说考研如何择专业? | ||
手把手教你如何选专业? | 高校研究生教育各学科门类排行?/a> |
相关推荐
跨考考研评
班型 | 定向班型 | 开班时?/td> | 高定?/td> | 标准?/td> | 评介绍 | 咨询 |
U季集训 | 冲刺?/td> | 9.10-12.20 | 168000 | 24800?/td> | 班面授+专业??+专业译֮向辅?协议加强评(高定?+专属规划{疑(高定?+_化答?复试资源(高定?+复试译(高定?+复试指导(高定?+复试班主?v1服务(高定?+复试面授密训(高定?+复试1v1(高定? | |
2023集训畅学 | 非定向(政英?数政qQ?/td> | 每月20?/td> | 22800?协议? | 13800?/td> | 先行阶在U课E?基础阶在U课E?强化阶在U课E?真题阶在U课E?冲刺阶在U课E?专业NҎ(gu)一对一评+班主dE督学服?全程规划体系+全程试体系+全程_化答?择校择专业能力定位体p?全年关键环节指导体系+初试加强?初试专属服务+复试全科标准班服?/td> |