内部排序1概述2插入排序3快速排序.ppt
《内部排序1概述2插入排序3快速排序.ppt》由会员分享,可在线阅读,更多相关《内部排序1概述2插入排序3快速排序.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构 10.1 概述概述第十章第十章 内部排序内部排序 10.2 插入排序插入排序 10.3 快速排序快速排序 10.4 选择排序选择排序 10.5 归并排序归并排序 10.6 基数排序基数排序 10.7 各种内部排序方法的比较各种内部排序方法的比较 10.1 概述概述一一.排序的定义排序的定义 假设含有假设含有n n个记录的序列个记录的序列 r1,r2,rn,对应的对应的关键字序列为关键字序列为 k1,k2,kn,需确定一种关系需确定一种关系 p(1),p(2),p(n)使得关键字序列满足:使得关键字序列满足:kp1 kp2 kpn或者或者 kp1 kp2 kpn即使记录成为一个按关键字
2、有序的序列即使记录成为一个按关键字有序的序列 rp1,rp2,rpn 这一过程称为排序。这一过程称为排序。二二.排序的稳定性排序的稳定性 在待排记录序列中,如果在待排记录序列中,如果任意任意两个关键字相两个关键字相同的记录,用某种排序方法排序后相对位置不变,同的记录,用某种排序方法排序后相对位置不变,则称这种排序方法是稳定的,否则称为不稳定的。则称这种排序方法是稳定的,否则称为不稳定的。设设 49,38,65,97,76,13,27,49,38,65,97,76,13,27,4949 是待排序列是待排序列 排序后排序后:13,27,38,49,:13,27,38,49,4949,65,76,9
3、7,65,76,97 稳定稳定 排序后排序后:13,27,38,:13,27,38,4949,49,65,76,97,49,65,76,97不稳定不稳定例例 10.1 概述概述排序稳定性的应用排序稳定性的应用股票交易系统股票交易系统:考虑一种股票交易:考虑一种股票交易 1 1)顾客输入:股东帐号、股票代码、申购价格、数量,)顾客输入:股东帐号、股票代码、申购价格、数量,股票交易系统将用户申购请求插入申购队列队尾;股票交易系统将用户申购请求插入申购队列队尾;2 2)股票交易系统按如下原则交易:)股票交易系统按如下原则交易:A A)申购价高者先成交)申购价高者先成交 B B)申购价相同者按申购时间
4、先后顺序成交)申购价相同者按申购时间先后顺序成交例例申购队列:用线性表表示申购队列:用线性表表示交易前:将申购队列按申购价排序,显然为满足原则交易前:将申购队列按申购价排序,显然为满足原则 交易交易(B)(B),要求排序方法是,要求排序方法是稳定稳定的的申购队列申购队列(09,10)09,10),(06,10.5),(033,9.8),(06,10.5),(033,9.8),(051,10)(051,10)排序后:排序后:(06,10.5),(06,10.5),(09,10)(09,10),(051,10)(051,10),(033,9.8),(033,9.8)实现实现 10.1 概述概述待排
5、记录放于地址连续的存储单元中;待排记录放于地址连续的存储单元中;待排记录放于链表,记录之间的次序关系由待排记录放于链表,记录之间的次序关系由 指针指示。指针指示。待排记录存放在地址连续的存储单元中,同时待排记录存放在地址连续的存储单元中,同时另设一个指示各个记录存储位置的地址向量。另设一个指示各个记录存储位置的地址向量。三三.待排记录序列的存储方式待排记录序列的存储方式 10.1 概述概述四四.顺序存储结构表示待排记录顺序存储结构表示待排记录#define MAXSIZE 20 /顺序表的最大长度顺序表的最大长度typedef int KeyType;/定义关键字类型为整数类型定义关键字类型为
6、整数类型typedef struct KeyType key;/关键字项关键字项 InfoType otherinfo;/其它数据项其它数据项RedType;/记录类型记录类型typedef struct RedType rMAXSIZE+1;/r0闲置或用作监视哨闲置或用作监视哨 int length;/顺序表长度顺序表长度SqList;/顺序表类型顺序表类型 10.1 概述概述 10.2 插入排序插入排序思路:思路:每步将一个待排序的对象,按其关键码大每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入
7、为止。位置上,直到对象全部插入为止。插入排序有多种具体实现算法:插入排序有多种具体实现算法:1)直接插入排序直接插入排序 2)希尔排序希尔排序一一.直接插入排序直接插入排序 10.2 插入排序插入排序思路:思路:将一个记录插入到已排好序的有序表中,将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增从而得到一个新的、记录数增1的有序表。的有序表。有序序列有序序列无序序列无序序列r r1r r2r ri-1r rir rnr ri+1r r1r r2r ri-1r rir rnr ri+1解决方法:解决方法:将第将第1个记录看成是初始有序表,然后从第个记录看成是初始有序表,然后从第2个
8、记录起个记录起依次插入到这个有序表中,直到将第依次插入到这个有序表中,直到将第n个记录插入。个记录插入。关键问题关键问题(1)如何构造初始的有序序列?如何构造初始的有序序列?一一.直接插入排序直接插入排序 10.2 插入排序插入排序算法描述:算法描述:for(i=2;i=L.length;+i)关键问题关键问题(2)如何查找待插入记录的插入位置如何查找待插入记录的插入位置?解决方法:解决方法:在在i-1个记录的有序区个记录的有序区r1 ri-1中插入记录中插入记录ri,首,首先顺序查找先顺序查找ri的正确插入位置,然后将的正确插入位置,然后将ri插入到相插入到相应位置。应位置。一一.直接插入排
9、序直接插入排序 10.2 插入排序插入排序算法描述:算法描述:L.r0=L.ri;for(j=i-1;L.r0.keyL.rj.key;-j)L.rj+1=L.rj;L.rj+1=L.r0;例例初始关键字初始关键字49 38 65 97 76 13 27 49()i=2i=238 49 65 97 76 13 27 49()(38)i=3i=338 49 65 97 76 13 27 49()(65)i=4i=438 49 65 97 76 13 27 49()(97)i=8i=813 27 38 49 49 65 76 97()(49)i=5i=538 49 65 76 97 13 27 4
10、9()(76)i=6i=613 38 49 65 76 97 27 49()(13)i=7i=713 27 38 49 65 76 97 49()(27)算法:算法:void InsertSort(SqList&L)for(i=2;i=L.length;+i)/只有一个元素也是有序表只有一个元素也是有序表 if(L.ri.keyL.ri-1.key)/只有只有“”才做插入操才做插入操作作 L.r0=L.ri;/r0为监视哨为监视哨 for(j=i-1;L.r0.keyL.rj.key;-j)L.rj+1=L.rj;/记录后移记录后移 L.rj+1=L.r0;/插入到正确位置插入到正确位置 vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内部 排序 概述 插入 快速
限制150内