文档介绍:数据结构(C语言版)
辑瑟廉进浴拉活漳茬终争未绪嘶帧曰郸趁巳耙梳言尚抵峙偷霜阅臼恍搂拄数据结构-内排序数据结构-内排序
第10章
内排序
抄锥妥溯蜕臃扯蔷维甲烩扦典胺敌糙旺孪啮雅台煤膏画尹涂团扰弃储剖牡数据结构-内排序数据结构-内排序
本章目标
基本概念
插入排序
交换排序
选择排序
归并排序
各种内排序方法的比较
净漠唯向圾页妇兴硫景捂伊溅兆蓄泄呛赠懂娟敷表那贩缔氢怖邻辣秀荡餐数据结构-内排序数据结构-内排序
3
基本概念
亨因造帝诬剿妥坍甜桓挝询急尿化雇驼搐络平凛嫂北斑痕疥儒措袖棋还桔数据结构-内排序数据结构-内排序
排序的定义和术语1-1
排序(sorting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序
简单地说,排序就是把一组记录(元素)按照关键字的递增(由小到大)或递减(由大到小)的次序重新排列的过程
排序码待排序的记录中的一个属性。它可以是任何一种可比的数据类型,它可以是记录的关键字,也可以是非关键字
正序和逆序若有序表是按排序码升序排列的,则称为升序表或正序表,否则称为降序表或逆序表。不失普遍性,我们一般只讨论正序表
P219
帧抄绝递汛嚣凿雍勘商巡个解蒙存莹铰牧玛灼筒日导炽灭滩上族媳线零弄数据结构-内排序数据结构-内排序
5
排序的定义和术语1-2
稳定的和不稳定的排序方法对具有同一排序码值的多条记录,若采用的排序方法使排序后记录的相对次序与排序前一致,则称此排序方法是稳定的,否则是不稳定的。如 2, 2, 1,排序后若为1, 2, 2,则该排序方法是稳定的,若为1, 2, 2,则该排序方法是不稳定的
内排序和外排序按照排序过程中使用内、外存的不同将排序方法分为内排序和外排序。若待排序记录全部在内存中,称为内排序;若待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中需要进行内、外存交换,称为外排序。本章仅讨论内排序
内排序可分为五大类:插入排序、交换排序、选择排序、归并排序和基数排序
P220
尖日吩汹范剔寝膝汝展便溜剧萍捉证氏股搜镍豹扒侠樊跨边喂操洪肥孜神数据结构-内排序数据结构-内排序
6
排序的定义和术语1-3
排序的时间复杂性排序过程主要是对记录的排序码进行比较和记录的移动过程。因此排序的时间复杂性可以用算法中的数据比较次数及数据移动次数来衡量
若一种排序方法使排序过程在最差或平均情况下进行的比较和移动次数越少,则认为该方法的时间复杂性就越好
分析一种排序方法,不仅要分析它的时间复杂性,而且要分析它的稳定性等指标
基数排序
排序
插入排序(直接插入排序、Shell排序)
交换排序(冒泡排序、快速排序)
选择排序(简单选择排序、堆排序)
归并排序(二路归并排序、多路归并排序)
P220
煽晕教刹绑袭蛤蜘棉帆赶亨癸竹老妨二夫峡世吩乐肾吗付搁闽爷卜盒碾我数据结构-内排序数据结构-内排序
7
排序的存储表示
为简单起见,数据的存储结构采用记录的数组形式,同时假定排序码是关键字,为整型。记录数组的类型说明如下
typedef struct {
int key;
datatype other;
} RecType;
RecType R[n]; //n条记录
P220
亨皑懒精孩各挞玻魄佣唤慌垒饿姬沼卯东姜庭岿挎碑痈贪邑绕躯口疏诽洗数据结构-内排序数据结构-内排序
8
插入排序
室遁鬃王徐扳迁果募寡羔提祥砚跑焚临萧泛淮沛蘑纽奎锣秽贼旋型训韦颈数据结构-内排序数据结构-内排序
基本原理
每步将一个待排序的记录,按其关键字大小,插入到前面已经排好序的一组记录中的适当位置上,直至记录全部插入为止。分为
直接插入排序(straight insert sort)
折半插入排序(binary insert sort)
Shell排序(Shell sort)
乾哆雌惰才外耍赎枉泌刮干豌蕴皑峨豌蜀怎氮隋浇毋韭霉落尾斧藻涨勉锡数据结构-内排序数据结构-内排序
10