第10章排序(简)详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序
11),请写出直接插入排序的中间过程序列。
【13】, 6, 3, 31, 9, 27, 5, 11
【6, 13】, 3, 31, 9, 27, 5, 11
【3, 6, 13】, 31, 9, 27, 5, 11
【3, 6, 13,31】, 9, 27, 5, 11
次数)
• 空间效率——占内存辅助空间的大小
• 稳定性——若两个记录A和B的关键字值相等,但排
序后A、B的先后次序保持不变,则称这种排序算法 是稳定的。
第
十
排序的稳定性
章
排
在待排序的序列中,关键字可以是记录的主关键
序 字,也可以是记录的次关键字,或是若干数据项的
Biblioteka Baidu
组合。
❖ 由主关键字的定义可知,任何一个记录的无序序列 经排序后得到的结果是唯一的。
10.3 快速排序(起泡排序、快速排序)
10.4 选择排序(简单选择排序、树形选择排序、 堆排序)
10.5 归并排序
10.6 基数排序
10.7 各种内部排序方法的比较讨论
第 十
10.1 基本概念
章
排 排序(Sorting):是将数据元素(记录)的一个任意序
序 列,重新排列成一个按关键字有序的序列。
章
最简单的 排序法!
排 新元素插入到哪里?
序
在已形成的有序表中顺序查找,并在适当
位置插入,把原来位置上的元素向后顺移。
基本思想
整个排序过程为n-1趟插入,即先将序列 中第1个记录看成是一个有序子序列,然后从 第2个记录开始,逐个进行插入,直至整个序 列有序
第
十
例1:
章
排
关键字序列T=(13,6,3,31,9,27,5,
❖ 外部排序: 排序的记录数量比较大,排序期间文件的全 部记录不能同时存放在计算机的内存里,排序过程中 需要不断地进行内存和外存之间的数据交换,则此类
排序称为~。
第 十
10.1 基本概念
章
排
序 排序的目的是什么? ——便于查找!
排序算法的好坏如何衡量?
• 时间效率——排序速度(即排序所花费的全部比较
序方法使排序后的结果为(15,15*,23,40, 67),则称此方法是稳定的;若一种排序方法 使排序后的结果可能为
(15*,15,23,40,67) ,则称此方法是不稳 定的。
第
十 排序的时间复杂性
章
排
排序过程主要是对记录的排序码进行比较和记录
序 的移动过程。因此排序的时间复杂性可以用算法执行
中的数据比较次数及数据移动次数来衡量。
有序表与无序表
一组记录按排序关键字的递增或递减次序排列得到
的结果被称之为有序表,相应地,把排序前的状态称
为无序表。
正序表与逆序表
若有序表是按排序码升序排列的,则称为升序表或
正序表,否则称为降序表或逆序表。
第
十
存储结构
章 排
在本章讨论的算法通常采用顺序存储结构,用一维
序 数组来实现,且记录按照关键字递增的顺序排列。
谢宁 张丽娟
周涛 李小燕
年龄 18 19 17 18 20 16
性别 男 男 女 女 男 女
第
十
排序的分类
章
排
按照排序过程中使用内、外存的不同,将排序方法
序 分为内部排序和外部排序。
❖ 内部排序:如果待排序的记录放在计算机内存中进行排 序,整个排序过程不需要访问外存便能完成,则此类
排序称为~。
➢ 内排序分类:插入排序、交换排序、选择排序、归 并排序和基数排序。
数据结构课程的内容
第 十
第10章 排序
章
排
序 学习要点
理解和熟悉各种排序的基本思想和过程
掌握各种排序算法的时间复杂度的分析
方法和结论
要求能根据各种排序方法的优缺点及不
同场合选择合适的排序方法
第 十 章
排 本章内容
序
10.1 基本概念
10.2 插入排序(直接插入、折半插入、表插入排 序、希尔排序)
/* 记录类型 */
typedef struct {
DataType r[maxsize+1];/* r[0]用作监视哨单元 */
int length ; /* 顺序表长度 */
} SqList;
第
十 按排序过程中依据的不同原则对内排方法分类:
章 排
(1)插入排序 (4)归并排序
序 (2)交换排序 (5)基数排序 (3)选择排序
排 关键字是指在一个记录中可以标识该数据项的值,它是
序 排序运算的重要依据。
关键字的选取应根据需要而定,比如在学生档案表中, 可选择“学号”为关键字来识别学生,也可选择“年龄” 为关键字对学生排序。
学号 990001 990002 990003 990004 990005 990006
姓名 王晓佳 林一鹏
❖ 若是次关键字,排序的结果不唯一,因为等待排序 的记录序列中可能存在两个或两个以上关键字相等
的记录。若采用的排序方法使具有相同关键字的记
录在排序过程中相对次序不变,则称此排序方法是
稳定的,否则称为不稳定的。
第 十 章 排
序 ❖ 例如:假定一组记录为(15,67,23,15*,40), 其中关键字同为15的记录有两个。如果一种排
#define maxsize 20 /* 设记录不超过20个 */
typedef int KeyType; /* 定义关键字为整数类型 */
typedef struct{
KeyType key; /* 关键字域 */
InfoType otherinfo; /* 其它数据域 */
} DataType;
章 排
➢插入排序的基本思想是:
序
每步将一个待排序的对象,按其关键码大小,插
入到前面已经排好序的一组对象的适当位置上,直到
对象全部插入为止。
边插入边排序,保证子序列中随时都是排好序的。
➢插入排序有多种具体实现算法: 1) 直接插入排序 2) 折半插入排序 3) 希尔排序
第
十 10.2.1 直接插入排序
按内排过程中所需的工作量分类: (1)简单的排序方法,其时间复杂度为O(n×n) (2)先进的排序方法,其时间复杂度为O(nlogn); (3)基数排序,其时间复杂度为O(d×n)
排序算法的两种基本操作: (1)比较两个关键字的大小; (2)将记录从一个位置移至另一个位置;
第
十 10.2 插入排序
一般情况下,假设含n个记录的序列为
(R1, R2, …, Rn) 其相应关键字序列为
(K1, K2, …, Kn) 需确定一种排列,使关键字满足如下的递增的关系
Ki1≤Ki2≤…≤Kin 则按此关系将记录序列重新排列为(Ri1, Ri2, …, Rin)的操作 称之为排序。
第 十
9.1 基本概念
章