- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数 据 结 构 —— 第9章 典型排序算法 第9章 典型排序算法 排序的定义和各种排序方法的特点,排序方法“稳定”或“不稳定”的含义 各种排序方法的原理、排序过程、时间复杂度的分析和实现算法 各种内排序方法的比较 希尔排序、快速排序、堆排序和归并排序等高效排序方法是本章难点 本章内容 9.1 排序定义及相关概念 排序:将一组杂乱无章的记录按一定的规律顺次排列起来。 关键字(key): 通常数据记录有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分记录,作为排序依据。该域即为关键字。 9.1 排序定义及相关概念 主关键字: 如果在待排序记录序列中各个记录的关键字互不相同,这种关键字即主关键字。按照主关键字进行排序,排序的结果是唯一的。 次关键字:待排序记录序列中有些记录的关键字可能相同,这种关键字称为次关键字。按照次关键字进行排序,排序的结果可能不唯一。 9.1 排序定义及相关概念 排序算法的稳定性: 如果在记录序列中有两个记录R[i]和R[j],它们的关键字 k[i] == k[j],且在排序之前,记录R[i]排在R[j]前面。如果在排序之后,记录R[i]仍在记录R[j]的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。 9.1 排序定义及相关概念 内排序与外排序: 内排序是指在排序期间数据记录全部存放在内存的排序;外排序是指在排序期间全部记录个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。 内排序按排序思想的不同,分为插入排序、交换排序、选择排序、归并排序和基数排序等五类。 9.1 排序定义及相关概念 排序的时间开销: 排序的时间开销是衡量算法好坏的最重要的标志。排序的时间开销可用算法执行中的记录比较次数与记录移动次数来衡量。各节给出算法运行时间代价的大略估算一般都按平均情况进行估算。对于那些受记录关键字序列初始排列及记录个数影响较大的,需要按最好情况和最坏情况进行估算。 算法执行时所需的附加存储: 评价算法好坏的另一标准。 9.1 排序定义及相关概念 待排序记录的存储方式: 顺序存储:以一维数组作为存储结构,排序时必须实际移动记录; 链式存储:以链表(动态链表或静态链表)作为存储结构,排序时不用物理移动记录,只需修改指针; 静态链表:有的排序方法难于在链表上实现,可将待排序记录本身存储在一组地址连续的存储单元内,同时附设一个指示记录存储位置的地址向量,排序过程中不移动记录,而移动地址向量中这些记录的地址。 #define MAXSIZE 20 typedef struct{ KeyType key; }DataType; typedef struct{ DataType data[MAXSIZE+1]; // 0号单元空闲 int length; }SeqList; 本章内容 9.2 插入排序 插入排序 (Insert Sorting) 基本思想:每步将一个待排序的记录,按其关键字大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。 9.2 插入排序 9.2.1 直接插入排序 9.2.2 折半插入排序 9.2.3 希尔排序 9.2.1 直接插入排序 直接插入排序的基本思想: 当插入第i (i ? 1) 个记录时,前面的R[1], R[2], …, R[i-1]已经排好序。这时,用R[i]的关键字与R[i-1], R[i-2], …的关键字顺序进行比较,找到插入位置即将R[i]插入,原来位置上的记录向后顺移。 例: 9.2.1 直接插入排序 性能分析 最好情况是原始记录已按关键字递增有序排列,整个排序过程的比较次数为n-1次,时间复杂度为O(n)。 最坏情况是原始记录按关键字递减有序排列,整个排序过程的比较次数为 (n+2)(n-1)/2,记录移动的次数为 (n+4)(n-1)/2,时间复杂度是O(n2) 。 平均情况下,时间复杂度是O(n2)。 9.2.1 直接插入排序 性能分析 关键字比较次数和记录移动次数与记录关键字的初始排列有关。 从空间看,直接插入排序算法只需一个记录的辅助空间。 直接插入排序是一种稳定的排序方法。 9.2 插入排序 9.2.1 直接插入排序 9.2.2 折半插入排序 9.2.3 希尔排序 9.2.2 折半插入排序 基本思想 设在顺序表中有一 个记录序列 R[1], R[2], …, R[n]。其中,R[1], R[2], …, R[i-1] 是已经排好序的记录。 在插入 R[i] 时,利
您可能关注的文档
最近下载
- 广东省东莞市东华高级中学、东华松山湖高级中学2024-2025学年高一(上)月考数学试卷(含答案).pdf VIP
- 第一二单元月考试卷(试题)人教版五年级上册数学+.1.docx VIP
- 矩阵论试卷.doc VIP
- 瓦控(VACON)伟肯CX,CXL,CXS变频器用户手册.pdf
- 企业培训师二级课件.pptx VIP
- 学堂在线 如何写好科研论文 期末考试答案.docx VIP
- 货币金融学(第十二版)PPT课件(全).pptx
- CPA考试《财管》历年真题汇编(含答案).pdf VIP
- 《6-8岁创意画-美味的柿子》-美术课件.pptx VIP
- 牧场物语矿石镇的伙伴们——触发事件其它.docx VIP
文档评论(0)