数据结构教程李春葆课后答案第10章内排序.pdf

数据结构教程李春葆课后答案第10章内排序.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10 章 内排序 教材中练习题及参考答案 1. 直接插入排序算法在含有n个元素的初始数据正序、反序和数据全部相等时,时间 复杂度各是多少? 答:含有n个元素的初始数据正序时,直接插入排序算法的时间复杂度为O(n) 。 2 含有n个元素的初始数据反序时,直接插入排序算法的时间复杂度为O(n ) 。 含有n个元素的初始数据全部相等时,直接插入排序算法的时间复杂度为O(n) 。 2. 回答以下关于直接插入排序和折半插入排序的问题: (1)使用折半插入排序所要进行的关键字比较次数,是否与待排序的元素的初始状态 有关? (2 )在一些特殊情况下,折半插入排序比直接插入排序要执行更多的关键字比较,这 句话对吗? 答: (1)使用折半插入排序所要进行的关键字比较次数,与待排序的元素的初始状态 无关。无论待排序序列是否有序,已形成的部分子序列是有序的。折半插入排序首先查找 插入位置,插入位置是判定树失败的位置 (对应外部节点),失败位置只能在判定树的最 下两层上。 (2 )一些特殊情况下,折半插入排序的确比直接插入排序需要更多的关键字比较,例 如,在待排序序列正序的情况下便是如此。 3. 有以下关于排序的算法: void fun(int a[],int n) { int i,j,d,tmp; d=n/3; while (true) { for (i=d;in;i++) { tmp=a[i]; j=i-d; while (j=0 tmpa[j]) { a[j+d]=a[j]; j=j-d; } a[j+d]=tmp; } if (d==1) break; else if (d3) d=1; 2 数据结构教程学习指导 else d=d/3; } } (1)指出fun(a ,n)算法的功能。 (2 )当a[]={5,1,3,6,2 ,7,4 ,8}时,问fun(a ,8)共执行几趟排序,各趟的排序 结果是什么? 答: (1)fun(a,n)算法的功能是采用增量递减为1/3的希尔排序方法对a数组中元素进 行递增排序。 (2 )当a[]={5,1,3,6,2 ,7,4,8}时,执行fun(a ,8) 的过程如下: d=2 :2 1 3 6 4 7 5 8 d=1 :1 2 3 4 5 6 7 8 共有两趟排序。 4. 在实现快速排序的非递归算法时,可根据基准元素,将待排序序列划分为两个子 序列。若下一趟首先对较短的子序列进行排序,试证明在此做法下,快速排序所需要的栈 的深度为O(log n) 。 2 答:由快速排序的算法可知,所需递归工作栈的深度取决于所需划分的最大次数。在 排序过程中每次划分都把整个待排序序列根据基准元素划分为左、右两个子序列,然后对 这两个子序列进行类似的处理。设S(n)为对n个记录进行快速排序时平均所需栈的深度,则: n n1 1 2 S(n)= n (S (k 1) S (n k )) n S (i) k 1 i 0 当n=1时,所需栈空间为常量,由此可推出:S(n)=O(log n) 。 2 实际上,在快速排序中下一趟首先对较短子序列排序,并不会改变所需栈的深度,所 以所需栈的深度仍为O(log n) 。

您可能关注的文档

文档评论(0)

cjp823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7060131150000004

1亿VIP精品文档

相关文档