数据结构与算法分析第九章排序技术总结.ppt

数据结构与算法分析第九章排序技术总结.ppt

  1. 1、本文档共212页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter 9 Sorting 第九章 排序 排序定义——将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫~ 排序分类 按待排序记录所在位置 内部排序:待排序记录存放在内存 外部排序:排序过程中需对外存进行访问的排序 按排序依据原则 插入排序:直接插入排序、折半插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:简单选择排序、堆排序 归并排序:2-路归并排序 基数排序 概述 排序:将一组杂乱无章的数据按一定的规律顺次排列起来。 数据表(datalist): 它是待排序数据对象的有限集合。 关键码(key): 通常数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据。该域即为关键码。每个数据表用哪个属性域作为关键码,要视具体的应用需要而定。即使是同一个表,在解决不同问题的场合也可能取不同的域做关键码。 主关键码: 如果在数据表中各个对象的关键码互不相同,这种关键码即主关键码。按照主关键码进行排序,排序的结果是唯一的。 次关键码: 数据表中有些对象的关键码可能相同,这种关键码称为次关键码。按照次关键码进行排序,排序的结果可能不唯一。 排序算法的稳定性: 如果在对象序列中有两个对象r[i]和r[j],它们的关键码 k[i] == k[j],且在排序之前,对象r[i]排在r[j]前面。如果在排序之后,对象r[i]仍在对象r[j]的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。 内排序与外排序: 内排序是指在排序期间数据对象全部存放在内存的排序;外排序是指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。 排序的时间开销: 排序的时间开销是衡量算法好坏的最重要的标志。排序的时间开销可用算法执行中的数据比较次数与数据移动次数来衡量。各节给出算法运行时间代价的大略估算一般都按平均情况进行估算。对于那些受对象关键码序列初始排列及对象个数影响较大的,需要按最好情况和最坏情况进行估算。 按排序所需工作量 简单的排序方法:T(n)=O(n²) 先进的排序方法:T(n)=O(nlogn) 基数排序:T(n)=O(d.n) 排序基本操作 比较两个关键字大小 将记录从一个位置移动到另一个位置 排序方法 插入排序 选择排序 交换排序 归并排序 直接插入排序 折半插入排序 简单选择排序 堆排序 起泡排序 快速排序 插入排序 直接插入、折半插入 1、直接插入排序: 基本思想:从数组的第2号元素开始,顺序从数组中取出元素,并将该元素插入到其左端已排好序的数组的适当位置上。 插入排序 直接插入、折半插入 该算法适合于n 较小的情况,时间复杂度为O(n2). 1、直接插入排序: 基本思想:从数组的第2号元素开始,顺序从数组中取出元素,并将该元素插入到其左端已排好序的数组的适当位置上 待排元素序列:[53] 27 36 15 69 42 第一次排序: [27 53] 36 15 69 42 第二次排序: [27 36 53] 15 69 42 第三次排序: [15 27 36 53] 69 42 第四次排序: [15 27 36 53 69] 42 第五次排序: [15 27 36 42 53 69] 直接插入排序示例 对于有n个数据元素的待排序列,插入操作要进行n-1次 直接插入排序的C++算法 template class Type void InsertionSort ( datalistType list ) { //按关键码 Key 非递减顺序对表进行排序 for ( int i = 1; i list.CurrentSize; i++ ) Insert ( list, i ); } template class Type viod Insert ( datalistType list, int i ) { ElementType temp = list.Vector[i]; int j = i; //从后向前顺序比较 算法分析 若设待排序的对象个数为curremtsize = n,则该算法的主程序执行n-1趟。 关键码比较次数和对象移动次数与对象关键码的初始排列有关。 while ( j 0

文档评论(0)

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

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

1亿VIP精品文档

相关文档