[理学]第十章内部排序.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]第十章内部排序

逐步扩大记录有序序列长度的方法大致有下列几类: 1. 插入类 将无序子序列中的一个或几个记录“插入”到有序序列中,从而增加记录的有序子序列的长度;如直接插入排序,折半插入排序,希尔排序. 2. 交换类 通过“交换”无序序列中的记录从而得到其中关键字最小或最大的记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度;如起泡排序,快速排序, 3. 选择类 从记录的无序子序列中“选择”关键字最小或最大的记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度;如简单选择排序.树形选择排序,堆排序. 4. 归并类 通过“归并”两个或两个以上的记录有序子序列,逐步增加记录有序序列的长度;如归并排序 5. 其它方法 如基数排序 从上述排序过程可见,希尔排序中子序列的构成不是简单地“逐段分割”,而是将相隔某个“增量”的记录组成一个子序列。关键字较小的记录不是一步一步地往前挪动,而是跳跃式地往前移,从而使得在最后进行一趟直接插入排序时,序列已基本有序,只要作记录的少量比较和移动即可完成排序,因而希尔排序的时间复杂度较直接插入排序低。它的时间是所取“增量”序列的函数。 10.3 快速 排 序 一、起泡排序 二、一趟快速排序 三、快速排序 四、快速排序的时间分析 一、起泡排序 基本思想: 从R[1]开始,两两比较R[i]和R[i+1]的关键字的大小,若R[i].key R[i+1].key,则交换R[i]和R[i+1]的位置。第一趟全部比较完毕后R[n]是序列中最大的记录。 再从R[1]开始两两比较R[i]和R[i+1] (i=1,2,...,n-2) 的关键字的大小,若R[i].key R[i+1].key则交换R[i]和R[i+1]的位置。第二趟全部比较完毕后R[n-1]是序列中次大记录。 如此反复,进行n-1趟冒泡排序后所有待排序的n个记录序列按关键字有序。   假设在排序过程中,记录序列R[1..n]的状态为: 第 i 趟起泡排序 无序序列R[1..n-i+1] 有序序列 R[n-i+2..n] n-i+1 无序序列R[1..n-i] 有序序列 R[n-i+1..n] 比较相邻记录,将关键字最大的记录交换到 n-i+1 的位置上 冒泡排序示例 初始状态 [65 97 76 13 27 49 58] 第1趟 [65 76 13 27 49 58] 97 第2趟 [65 13 27 49 58] 76 97 第3趟 [13 27 49 58] 65 76 97 第4趟 [13 27 49] 58 65 76 97 第5趟 [13 27] 49 58 65 76 97 第6趟 [13] 27 49 58 65 76 97 设待排记录序列的关键字为(65,97,76,13,27,49,58) 冒泡排序每一趟执行后的序列状态如下:   目标:找一个记录,以它的关键字作为“枢轴”,凡其关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。 致使一趟排序之后,记录的无序序列R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t],且 R[j].key≤ R[i].key ≤ R[j].key (s≤j≤i-1) 枢轴 (i+1≤j≤t)。 二、一趟快速排序(一次划分) s t low high 设 R[s]=52 为枢轴 将 R[high].key 和 枢轴的关键字进行比较,要求R[high].key ≥ 枢轴的关键字 将 R[low].key 和 枢轴的关键字进行比较,要求R[low].key ≤ 枢轴的关键字 high 23 low 80 high 14 low 52 例如 R[0] 52 low high high high low 可见,经过“一次划分” ,将关键字序列 52, 49, 80, 36, 14, 58, 61, 97, 23, 75 调整为: 23, 49, 14, 36, (52) 58, 61, 97, 80, 75 在调整过程中,设立了两个指针: low 和high,它们的初值分别为: s 和 t, 之后逐渐减小 high,增加 low,并保证 R[high].key≥52,和 R[low].key≤52,否则进行记录的“交换”。 三、快速排序

文档评论(0)

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

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

1亿VIP精品文档

相关文档