版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
排序习题参考标准答案排序习题参考标准答案排序习题参考标准答案全文共排序习题参考标准答案全文共8页,当前为第1页。PAGEPAGE1————————————————————————————————作者:————————————————————————————————日期:排序习题参考标准答案全文共8页,当前为第2页。排序习题参考标准答案全文共8页,当前为第2页。习题七参考答案一、选择题1.内部排序算法的稳定性是指(D)。A.该排序算法不允许有相同的关键字记录B.该排序算法允许有相同的关键字记录C.平均时间为0(nlogn)的排序方法D.以上都不对2.下面给出的四种排序算法中,(B)是不稳定的排序。A.插入排序
B.堆排序
C.二路归并排序
D.冒泡排序3.在下列排序算法中,哪一种算法的时间复杂度与初始排序序列无关(D)。A.直接插入排序B.冒泡排序
C.快速排序
D.直接选择排序4.关键字序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中(C)的两趟排序后的结果。A.选择排序
B.冒泡排序
C.插入排序
D.堆排序5.下列排序方法中,(D)所需的辅助空间最大。A.选择排序B.希尔排序C.快速排序D.归并排序6.一组记录的关键字为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为支点得到的一次划分结果为(C)。A.(38,40,46,56,79,84)
B.(40,38,46,79,56,84)C.(40,38,46,56,79,84)
D.(40,38,46,84,56,79)7.在对一组关键字序列{70,55,100,15,33,65,50,40,95},进行直接插入排序时,把65插入,需要比较(A)次。A.2B.4C8.从待排序的序列中选出关键字值最大的记录放到有序序列中,该排序方法称为(B)。A.希尔排序B.直接选择排序C.冒泡排序D.快速排序9.当待排序序列基本有序时,以下排序方法中,(B)最不利于其优势的发挥。A.直接选择排序B.快速排序C.冒泡排序D.直接插入排序10.在待排序序列局部有序时,效率最高的排序算法是(B)。A.直接选择排序B.直接插入排序C.快速排序D.归并排序二、填空题执行排序操作时,根据使用的存储器可将排序算法分为内排序和外排序。在对一组记录序列{50,40,95,20,15,70,60,45,80}进行直接插入排序时,当把第7个记录60插入到有序表中时,为寻找插入位置需比较3次。在直接插入排序和直接选择排序中,若初始记录序列基本有序,则选用直接插入排序。在对一组记录序列{50,40,95,20,15,70,60,45,80}进行直接选择排序时,第4次交换和选择后,未排序记录为{50,70,60,95,80}。n个记录的冒泡排序算法所需的最大移动次数为3n(n-1)/2,最小移动次数为0。对n个结点进行快速排序,最大的比较次数是n(n-1)/2。对于堆排序和快速排序,若待排序记录基本有序,则选用堆排序。在归并排序中,若待排序记录的个数为20,则共需要进行5趟归并。若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的比较和数据元素的移动。10.在插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序和基数排序中,平均比较次数最少的是快速排序,需要内存容量最多的是基数排序。三、算法设计题试设计算法,用插入排序方法对单链表进行排序。排序习题参考标准答案全文共8页,当前为第3页。排序习题参考标准答案全文共8页,当前为第3页。publicstaticvoidinsertSort(LinkListL){Nodep,q,r,u;p=L.getHead().getNext();L.getHead().setNext(null);//置空表,然后将原链表结点逐个插入到有序表中while(p!=null){//当链表尚未到尾,p为工作指针r=L.getHead();q=L.getHead().getNext();while(q!=null&&(Integer.parseInt((String)q.getData()))<=(Integer.parseInt((String)p.getData()))){//查P结点在链表中的插入位置,这时q是工作指针r=q;q=q.getNext();}u=p.getNext();p.setNext(r.getNext());r.setNext(p);p=u;//将P结点链入链表中,r是q的前驱,u是下一个待插入结点的指针}}试设计算法,用选择排序方法对单链表进行排序。参考答案://单链表选择排序算法publicstaticvoidselectSort(LinkListL){//p为当前最小,r为此过程中最小,q为当前扫描接点Nodep,r,q;NodenewNode=newNode();newNode.setNext(L.getHead());L.setHead(newNode);//制造一个最前面的节点newNode,解决第一个节点的没有前续节点需要单独语句的问题。p=L.getHead();while(p.getNext().getNext()!=null){r=p.getNext();q=p.getNext().getNext();while(q.getNext()!=null){if(Integer.parseInt((String)q.getNext().getData())<=(Integer.parseInt((String)r.getNext().getData()))){r=q;}q=q.getNext();}排序习题参考标准答案全文共8页,当前为第4页。if(r!=p){//交换p与排序习题参考标准答案全文共8页,当前为第4页。Nodeswap=r.getNext();r.setNext(r.getNext().getNext());//r的next指向其后继的后继swap.setNext(p.getNext());p.setNext(swap);//p的后继为swap}p=p.getNext();}//whilep.setNext(null);}试设计算法,实现双向冒泡排序(即相邻两遍向相反方向冒泡)。参考答案://产生随机数方法publicstaticint[]random(intn){if(n>0){inttable[]=newint[n];for(inti=0;i<n;i++){table[i]=(int)(Math.random()*100);//产生一个0~100之间的随机数}returntable;}returnnull;}//输出数组元素方法publicstaticvoidprint(int[]table){if(table.length>0){for(inti=0;i<table.length;i++){System.out.print(table[i]+"");}System.out.println();}}//双向冒泡排序方法publicstaticvoiddbubblesort(int[]table){inthigh=table.length;intleft=1;intright=high-1;intt=0;do{//正向部分for(inti=right;i>=left;i--){if(table[i]<table[i-1]){inttemp=table[i];排序习题参考标准答案全文共8页,当前为第5页。table[i]=table[排序习题参考标准答案全文共8页,当前为第5页。table[i-1]=temp;t=i;}}left=t+1;//反向部分for(inti=left;i<right+1;i++){if(table[i]<table[i-1]){inttemp=table[i];table[i]=table[i-1];table[i-1]=temp;t=i;}}right=t-1;}while(left<=right);}试设计算法,使用非递归方法实现快速排序。参考答案:publicstaticvoidNonrecursiveQuickSort(int[]ary){if(ary.length<2){return;}//数组栈:记录着高位和低位的值int[][]stack=newint[2][ary.length];//栈顶部位置inttop=0;//低位,高位,循环变量,基准点//将数组的高位和低位位置入栈stack[1][top]=ary.length-1;stack[0][top]=0;top++;//要是栈顶不空,那么继续while(top!=0){//将高位和低位出栈//低位:排序开始的位置top--;intlow=stack[0][top];//高位:排序结束的位置inthigh=stack[1][top];//将高位作为基准位置//基准位置intpivot=high;inti=low;for(intj=low;j<high;j++){排序习题参考标准答案全文共8页,当前为第6页。排序习题参考标准答案全文共8页,当前为第6页。if(ary[j]<=ary[pivot]){inttemp=ary[j];ary[j]=ary[i];ary[i]=temp;i++;}}//如果i不是基准位,那么基准位选的就不是最大值//而i的前面放的都是比基准位小的值,那么基准位//的值应该放到i所在的位置上if(i!=pivot){inttemp=ary[i];ary[i]=ary[pivot];ary[pivot]=temp;}if(i-low>1){//此时不排i的原因是i位置上的元素已经确定了,i前面的都是比i小的,i后面的都是比i大的stack[1][top]=i-1;stack[0][top]=low;top++;}//当high-i小于等于1的时候,就不往栈中放了,这就是外层while循环能结束的原因//如果从i到高位之间的元素个数多于一个,那么需要再次排序if(high-i>1){//此时不排i的原因是i位置上的元素已经确定了,i前面的都是比i小的,i后面的都是比i大的stack[1][top]=high;stack[0][top]=i+1;top++;}}}试设计算法,判断完全二叉树是否为大顶堆。参考答案:booleancheckmax(BiTreeNodet)//判断完全二叉树是否为大顶堆{BiTreeNodep=t;if(p.getLchild()==null&&p.getRchild()==null){returntrue;}else{if(p.getLchild()!=null&&p.getRchild()!=null){排序习题参考标准答案全文共8页,当前为第7页。if((((RecordNode)p.getLchild().getData()).getKey()).compareTo(((RecordNode)p.getData()).getKey())<=0&&(((RecordNode)p.getRchild().getData()).get排序习题参考标准答案全文共8页,当前为第7页。returncheckmax(p.getLchild())&&checkmax(p.getRchild());}else{returnf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 减轻溢奶影响的家居护理技巧
- 四川农商联合银行备考题库科技部2026年校园招聘备考题库及参考答案详解
- 办公室文档归档管理模板
- 2025年可持续发展目标下的企业战略规划可行性研究报告
- 芭蕾舞形体训练核心要素
- 合作分包合同范本
- 插花约稿合同范本
- 脊柱侧弯术前评估规范
- 培养协议聘用合同
- 境外员工合同范本
- (完整文本版)日文履历书(文本テンプレート)
- 国家开放大学《管理英语4》边学边练Unit 5-8(答案全)
- 时尚·魅力-大学生魅商修炼手册智慧树知到期末考试答案章节答案2024年南昌大学
- 《金牌店长培训》课件
- 电工培训触电急救课件
- 宜昌市点军区2023-2024学年七年级上学期期末数学综合测试卷(含答案)
- 井下单项、零星工程管理制度模版
- 道路危险货物运输企业安全生产标准化评价实施细则
- ESD静电防护检测及管控标准
- 卧床病人的护理即翻身技巧课件
- 智能信报箱系统施工方案
评论
0/150
提交评论