- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(排序习题
排序习题8.13 将哨兵放在R[n]中,被排序的记录放在R[0..n-1]中,重写直接插入排序算法。8.14 以单链表作为存储结构实现直接插入排序算法。?8.15 设计一算法,使得在尽可能少的时间内重排数组,将所有取负值的关键字放在所有取非负值的关键字之前。请分析算法的时间复杂度。?*8.16 写一个双向冒泡排序的算法,即在排序过程中交替改变扫描方向。?8.17 下面是一个自上往下扫描的冒泡排序的伪代码算法,它采用lastExchange 来记录每趟扫描中进行交换的最后一个元素的位置,并以它作为下一趟排序循环终止的控制值。请仿照它写一个自下往上扫描的冒泡排序算法。void BubbleSort(int A[],int n) //不妨设A[0..n-1]是整型向量 int lastExchange,j,i=n-1; while (i0) lastExchange=0; for(j=0;ji;j++)//从上往下扫描A[0..i] if(A[j+1]A[j]){ 交换A[j]和A[j+1]; lastExchange=j; } i=lastExchange;//将i置为最后交换的位置 }//endwhile}//BubbleSort?8.18 改写快速排序算法,要求采用三者取中的方式选择划分的基准记录;若当前被排序的区间长度小于等于3时,无须划分而是直接采用直接插入方式对其排序。?8.19 对给定的j(1≤j≤n ),要求在无序的记录区R[1..n]中找到按关键字自小到大排在第j个位置上的记录(即在无序集合中找到第j个最小元),试利用快速排序的划分思想编写算法实现上述的查找操作。?8.20`以单链表为存储结构,写一个直接选择排序算法。8.21 写一个heapInsert(R,key)算法,将关键字插入到堆R中去,并保证插入R后仍是堆。提示:应为堆R增加一个长度属性描述(即改写本章定义的SeqList类型描述,使其含有长度域);将key先插入R中已有元素的尾部(即原堆的长度加1的位置,插入后堆的长度加1),然后从下往上调整,使插入的关键字满足性质。请分析算法的时间。8.22 写一个建堆算法:从空堆开始,依次读入元素调用上题中堆插入算法将其插入堆中。8.23 写一个堆删除算法:HeapDelete(R,i),将R[i]从堆中删去,并分析算法时间,提示:先将R[i]和堆中最后一个元素交换,并将堆长度减1,然后从位置i开始向下调整,使其满足堆性质。8.24 已知两个单链表中的元素递增有序,试写一算法将这两个有序表归并成一个递增有序的单链表。算法应利用原有的链表结点空间。8.25 设向量A[0..n-1]中存有n个互不相同的整数,且每个元素的值均在0到n-1之间。试写一时间为O(n)的算法将向量A排序,结果可输出到另一个向量B[0..n-1]中。*8.26 写一组英文单词按字典序排列的基数排序算法。设单词均由大写字母构成,最长的单词有d个字母。提示:所有长度不足d个字母的单词都在尾处补足空格,排序时设置27个箱子,分别与空格,A,B...Z对应。?例题1、下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的是(B)A、二分插入排序?B、堆排序?C、冒泡排序?D、快速排序例题2、写出下列算法的时间复杂度。(1)冒泡排序;(2)选择排序;(3)插入排序;(4)二分插入排序;(5)快速排序;(6)堆排序;(7)归并排序例题1、写出希尔排序算法程序,并说明最坏的情况下需要进行多少次的比较和交换。?程序略,需要O(n^2)次的比较例题2、设要将序列(Q,?H,?C,?Y,?P,?A,?M,?S,?R,?D,?F,?X)中的关键码按字母序的升序重新排列,则:冒泡排序一趟扫描的结果是?H,?C,?Q,?P,?A,?M,?S,?R,?D,?F,?X?,Y?;初始步长为4的希尔(shell)排序一趟的结果是?P,?A,?C,?S,?Q,?D,?F,?X?,?R,?H,M,?Y??;二路归并排序一趟扫描的结果是?H,?Q,?C,?Y,A,?P,?M,?S,?D,?R,?F,?X?;快速排序一趟扫描的结果是?F,?H,?C,?D,?P,?A,?M,?Q,?R,?S,?Y,X?;堆排序初始建堆的结果是??A,?D,?C,?R,?F,?Q,?M,?S,?Y,P,?H,?X?。例题1、在插入和选择排序中,若初始数据基本正序,则选用?插入排序(到尾部)?;若初始数据基本反序,则选用?选择排序?。例题2、?下述几种排序方法中,平均查找长度(ASL)最小的是A.?插入排序B.快速排序?C.?归并排序???????D.?选择排序例题1、对于整数序列100,99,98,…3,2,1,如果将它完全倒过来,分别用冒泡排序,它们的比较次数和交换次数各是多少??答:冒泡排序的比较
文档评论(0)