算法与数据结构_严蔚敏.ppt

  1. 1、本文档共815页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
i=1 (30) 13 70 85 39 42 6 20 i=2 13 (13 30) 70 85 39 42 6 20 ┇ i=7 6 (6 13 30 39 42 70 85) 20 i=8 20 (6 13 30 39 42 70 85) 20 low high mid i=8 20 (6 13 30 39 42 70 85) 20 low high mid i=8 20 (6 13 30 39 42 70 85) 20 mid high low i=8 20 (6 13 20 30 39 42 70 85) 图10-2 折半插入排序过程 2 2-路插入排序 是对折半插入排序的改进,以减少排序过程中移动记录的次数。附加n个记录的辅助空间,方法是: ① 另设一个和L-R同类型的数组d,L-R[1]赋给d[1],将d[1]看成是排好序的序列中中间位置的记录; ② 分别将L-R[ ]中的第i个记录依次插入到d[1]之前或之后的有序序列中,具体方法: ◆ L-R[i].keyd[1].key: L-R[i]插入到d[1]之前的有序表中; ◆ L-R[i].key≥d[1].key: L-R[i]插入到d[1]之后的有序表中; 关键点:实现时将向量d看成是循环向量,并设两个指针first和final分别指示排序过程中得到的有序序列中的第一个和最后一个记录。 排序示例 设有初始关键字集合{49, 38, 65, 13, 97, 27, 76} ,采用2-路插入排序的过程如右图10-3所示。 在2-路插入排序中,移动记录的次数约为n2/8 。但当L-R[1]是待排序记录中关键字最大或最小的记录时,2-路插入排序就完全失去了优越性。 27 76 d 49 first first first first final final final final 65 38 97 97 13 13 图10-3 2-路插入排序过程 3 表插入排序 前面的插入排序不可避免地要移动记录,若不移动记录就需要改变数据结构。附加n个记录的辅助空间,记录类型修改为: typedef struct RecNode { KeyType key ; infotype otherinfo ; int *next; }RecNode ; 初始化:下标值为0的分量作为表头结点,关键字取为最大值,各分量的指针值为空; ① 将静态链表中数组下标值为1的分量(结点)与表头结点构成一个循环链表; ② i=2 ,将分量R[i]按关键字递减插入到循环链表; ③ 增加i ,重复②,直到全部分量插入到循环链表。 例:设有关键字集合{49, 38, 65, 97, 76, 13, 27, 49} ,采用表插入排序的过程如下图10-4所示。 0 1 2 3 4 5 6 7 8 key域 next域 MAXINT 49 38 65 13 97 27 76 49 1 0 - - - - - - - i=2 MAXINT 49 38 65 13 97 27 76 49 2 0 1 - - - - - - i=3 MAXINT 49 38 65 13 97 27 76 49 2 3 1 0 - - - - - i=4 MAXINT 49 38 65 13 97 27 76 49

文档评论(0)

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

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档