数据结构F排序.ppt

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

第十章 内部排序 10.1 概述 10.2 插入排序 10.2.1 直接插入排序 10.2.3 shell排序 10.3 交换排序(快速排序) 10.4 选择排序 10.4.1 简单选择排序 10.4.3 堆排序 10.5 归并排序 10.6 基数排序 10.7 各种排序方法的比较讨论 10.1 内部排序概述 排序(Sorting): 将数据元素(或记录)的一个任意序列,重新排列成一个按关键字有序的序列。 排序方法的稳定性: 对关键字相同的数据元素,排序前后它们的领先关系保持不变,则称该排序方法是稳定的。反之,称该排序方法是不稳定的。 内部排序 待排序记录存放在计算机的内存中进行排序。 外部排序 待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序。 排序的分类 按排序过程依据的不同原则进行分类: 插入排序、 交换排序、 选择排序、 归并排序和 基数排序 按工作量分类,可以分为三类: (1)简单的排序方法,其时间复杂度为O(n2); (2)先进的排序方法,其时间复杂度为O(nlog2n); (3)基数排序,其时间复杂度为O(dn); 排序的基本操作和 记录的存储方式 排序过程中需要的两种基本操作: (1)比较关键字的大小; (2)将记录从一个位置移至另一个位置。 待排序记录序列可有下列三种存储方式: (1)记录存放在一组连续的存储单元中;类似于线性表的顺序存储结构,记录次序由存储位置决定,实现排序需移动记录。 (2)记录存放在静态链表中;记录次序由指针指示,实现排序不需移动记录,仅需修改指针。--- 链排序 (3)记录本身存放在一组连续的存储单元中,同时另设指示各个记录存储位置的地址向量,排序过程中不移动记录本身,而移动地址向量中相应记录的地址。排序结束后再根据地址调整记录的存储位置。--- 地址排序 待排序记录的数据类型 #define MAXSIZE 20 typedef int KeyType; typedef struct{ KeyType key; InfoType otherinfo; }RcdType; typedef struct{ RedType r[MAXSIZE+1]; int length; }SqList; 10.2 插入排序 10.2.1 直接插入排序 例:序列为{49,38,65,97,76,13,27,49} {(49),38,65,97,76,13,27,49} (38) {(38,49),65,97,76,13,27,49} (65) {(38,49,65),97,76,13,27,49} (97) {(38,49,65,97),76,13,27,49} (76) {(38,49,65,76,97),13,27,49} (13) {(13,38,49,65,76,97),27,49} (27) {(13,27,38,49,65,76,97),49} (49) {(13,27,38,49,49,65,76,97)} 直接插入排序算法 10.2.2 Shell排序算法 基本思想: 先将整个待排序记录序列分割成若干子序列分别进行直接插入排序,待整个序列“基本有序”时,再对全体记录进行一次直接插入排序。 算法复杂度:O(n3/2) Shell排序举例(非稳定的) 10.3 交换排序 1. 冒泡排序(其时间复杂度O(n2)) 2. 快速排序 ----- 对冒泡排序的一种改进 基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,则可分别对这两部分记录继续分别进行排序,以达到整个序列有序。 快速排序举例 快速排序分析 快速排序的平均时间为T(n) = knlog(n) k为某个常数因子 经验表明,在同数量级的排序方法中,快速排序的常数因子k最小. 就平均时间而言,快速排序是最好的. 若初始序列按关键字基本有序,快速排序蜕化为起泡排序,其时间复杂度为O(n2)。 改进的方法,用“三者取中”的法则选取枢轴记录(pivotkey). 快速排序举例 快速排序算法(一) 快速排序算法(二) 10.4 选择排序 10.4.1. 简单选择排序(其时间复杂度O(n2)) 基本思想: 每一趟在序列的后n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为第i个记录。 10.4.3 堆排序 堆的定义: n个元素的序列{k1,k2,...,kn}当且仅当满足下列条件时,称之为堆。 实现堆要解决的问题 (1)如何从一个无序序列建成一个堆? (2)如何在输出堆顶元素之后,调整

文档评论(0)

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

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

1亿VIP精品文档

相关文档