北邮数据结构排序ppt课件.ppt
《北邮数据结构排序ppt课件.ppt》由会员分享,可在线阅读,更多相关《北邮数据结构排序ppt课件.ppt(116页珍藏版)》请在三一办公上搜索。
1、第八章 排序,北京邮电大学信息与通信工程学院,数据结构与STL,第八章 排序,学习内容: 1. 概述 2. 插入排序 3. 交换排序 4. 选择排序 5. 归并排序6. 排序比较7. 外部排序8. STL 中相关排序算法,2022/12/25,2,1. 概述,数据结构与STL,1 概述,排序 给定一个记录序列,按照每个记录的关键码将记录进行重新排列,使关键码从小到大/从大到小有序。正序:关键码从小到大排列逆序:关键码从大到小排列,2022/12/25,3,数据结构与STL,1 概述,趟 在排序算法中,将待排序的记录扫描一遍称为一趟。稳定性 待排序记录中具有相同关键码的记录,若排序前后,这些记录
2、的相对位置不变,则为稳定排序;否则为不稳定。,2022/12/25,4,数据结构与STL,1 概述,排序的分类 根据是否将全部记录放进内存,分为内部排序和外部排序 根据排序的原则,可以将排序分成: 插入排序 交换排序 选择排序 归并排序,2022/12/25,5,数据结构与STL,1 概述,如何评价一个排序算法?排序的基本操作:比较和移动主要:比较的次数或移动次数较少的算法性能较好。次要:空间复杂度. 算法本身的复杂度,2022/12/25,6,数据结构与STL,第八章 排序,学习内容: 1. 概述 2. 插入排序 3. 交换排序 4. 选择排序 5. 归并排序6. 排序比较7. 外部排序8.
3、 STL 中相关排序算法,2022/12/25,7,2. 插入排序,数据结构与STL,插入排序,主要内容1存储结构2直接插入排序3希尔排序,2022/12/25,8,数据结构与STL,1存储结构,排序使用顺序结构 为了关注排序算法本身,所以本章所有排序的存储结构是0号位置留空的整型一维数组。 int rn;,2022/12/25,9,数据结构与STL,2. 插入排序,插入排序的特征类似于玩纸牌时整理手中纸牌的过程。寻找一个指定记录在待排序记录中的位置,然后插入的排序算法。,2022/12/25,10,数据结构与STL,2.直接插入排序,基本思想 每次将一个待排序的记录按其关键码的大小插入到一个
4、已经排序好的有序序列中,直到全部记录排序好。,2022/12/25,11,数据结构与STL,2.直接插入排序,需要解决的问题 1)如何构造初始有序序列? 2)如何找到插入的位置?,2022/12/25,12,数据结构与STL,1)如何构造初始有序序列?,2022/12/25,13,数据结构与STL,直接插入排序的过程,2022/12/25,14,数据结构与STL,2)如何找到插入的位置?,基本思想 设置r0为“哨兵”,从后向前查找有序区,边查找边后移,直到找到合适的位置,将r0插入。,2022/12/25,15,r0=ri;for (int j=i-1; r0rj; j-) rj+1 =rj;
5、 rj+1 = r0;,数据结构与STL,if (riri-1) r0=ri; for (int j=i-1; r0rj; j-) rj+1 =rj; rj+1 = r0;,2. 直接插入排序的算法,void InsertSort(int r, int n) /升序排列 for (int i=2; i=n; i+) /i从2n循环,共n-1趟排序r0=ri; for (int j=i-1; r0rj; j-) rj+1 =rj; rj+1 = r0; ,2022/12/25,16,数据结构与STL,2. 直接插入排序的性能分析,最好情况正序序列:比较 移动最坏情况逆序序列:比较 移动平均情况时
6、间复杂度O(n2) 空间复杂度O(1),2022/12/25,数据结构与STL,17,n-1,0,2. 直接插入排序的特点,稳定性插入排序是一种稳定的排序算法适用性 尤其适合待排序记录基本有序的情况,2022/12/25,18,数据结构与STL,3. 希尔排序,希尔排序是对插入排序的一种改进,原因1)基本有序的序列,直接插入最快2)无序序列,记录数很少时,也很快基本思想 将待排序的记录集分成多个子集,分别对这些子集进行排序,待整个序列基本有序时,在对记录进行一次直接插入排序。,2022/12/25,19,数据结构与STL,3.希尔排序,2022/12/25,20,数据结构与STL,49 38
7、65 97 76 13 27 49 55 04,原始序列 d=10/2=5,13 27 49 55 04 49 38 65 97 76,第一趟 d=5/2=2,3.希尔排序,2022/12/25,21,数据结构与STL,04 27 13 49 38 55 49 65 97 76,第二趟 d=2/2=1,04 13 27 38 49 49 55 65 76 97,第三趟,3.希尔排序(缩小增量排序),具体排序过程设待排序对象序列有 n 个记录,先取 d n,比如d= n/2 作为间隔, 将全部对象分为 d 个子序列, 对每一个子序列中分别施行直接插入排序。然后缩小间隔 d, 例如取 d =d/2
8、,重复上述的子序列划分和排序工作。直到最后取 d = 1, 将所有对象放在同一个序列中排序为止。,2022/12/25,22,数据结构与STL,3.希尔排序,希尔排序的子序列划分 for(int d=n/2; d=1;d=d/2) /以d为增量 以d为增量,在子序列中进行插入排序。,2022/12/25,23,数据结构与STL,希尔排序,假设增量=d,则一趟希尔排序的过程for (int i=d+1 ;i0 ,2022/12/25,24,数据结构与STL,2022/12/25,数据结构与STL,25,13 38 55 76,13 27 4955 04 49 38 65 97 76,04 27
9、65,49 49 97,假设增量=3,则一趟希尔排序的过程,3.希尔排序,void ShellInsert ( int r, int n) for(int d=n/2; d=1;d=d/2) /以d为增量 for (int i=d+1 ;i0 ,2022/12/25,26,数据结构与STL,3.希尔排序的性能分析,时间复杂度希尔排序的时间与“增量序列”有关,不同的“增量序列”时间复杂度不同。经过大量的实验,时间复杂度O(n2) 和 O(nlog2n) 之间稳定性 希尔排序是一种不稳定的排序算法,2022/12/25,27,数据结构与STL,第八章 排序,学习内容: 1. 概述 2. 插入排序
10、4. 选择排序 5. 归并排序6. 排序比较7. 外部排序8. STL 中相关排序算法,2022/12/25,28,3. 交换排序,数据结构与STL,交换排序,主要内容 1存储结构 2起泡排序 3起泡排序(改进) 4快速排序 5快速排序(改进),2022/12/25,29,数据结构与STL,1存储结构,排序使用顺序结构 为了关注排序算法本身,所以本章所有排序的存储结构是0号位置留空的整型一维数组。 int rn;交换排序的特征 在待排序的记录中选择两个记录,将它们的关键码进行比较,如果反序则交换它们的位置。,2022/12/25,30,数据结构与STL,2. 起泡排序,基本思想 两两比较相邻的
11、记录,如果反序,则交换位置,直到没有反序的记录为止。,2022/12/25,31,无序序列r1.i,有序序列 ri+1.n,反序则交换,标记,数据结构与STL,起泡排序的过程,2022/12/25,32,第一趟,初始状态,数据结构与STL,第二趟,无序区,有序区,2022/12/25,33,数据结构与STL,2. 起泡排序,void BubbleSort( int r, int n) /外循环:总共需要遍历的趟数 for (int i=1;irj+1) /相邻元素比较 r0=rj; rj = rj+1; rj+1 = r0; ,2022/12/25,34,数据结构与STL,3. 起泡排序(改进
12、),2022/12/25,数据结构与STL,35,初始序列,50 13 55 97 27 38 49 65,第一趟,13 50 55 97 27 38 49 65,13 50 55 27 97 38 49 65,13 50 55 27 38 97 49 65,13 50 55 27 38 49 97 65,13 50 55 27 38 49 6597,第二趟,13 50 27 55 38 49 6597,13 50 27 38 55 49 6597,13 50 27 38 49 55 65 97,pos=n,3. 起泡排序(改进),2022/12/25,数据结构与STL,36,第三趟,13 2
13、7 50 38 49 55 65 97,13 27 38 50 49 55 65 97,13 27 38 49 50 55 65 97,第四趟,13 27 38 49 50 55 65 97,3. 起泡排序(改进),具体过程1)初始状态无序区为r1.n2)对无序区从前向后,依次比较相邻记录,若反序则交换,并记录交换的位置pos。最后一次交换的位置pos,就是下一趟无序区r1.pos3)反复执行2),直到无序区中没有反序的记录,2022/12/25,37,数据结构与STL,3. 起泡排序(改进),已知无序区r1.pos,则如何进行反序交换?int bound = pos; /带排序记录右边界po
14、s=0; /标记,记录交换的位置 for (int i=1; iri+1) r0 = ri; ri=ri+1; ri+1=r0; pos =i; /记录最后交换的位置 ,2022/12/25,38,数据结构与STL,3. 起泡排序(改进),void BubbleSort ( int r, int n) int pos = n; while (pos!=0)int bound = pos; /本次无序记录的范围pos = 0;for(int i=1;i ri+1)/ 相邻记录比较 r0 = ri;ri = ri+1; ri+1=r0; /交换pos = i; ,2022/12/25,39,数据结
15、构与STL,3.起泡排序的性能分析,2022/12/25,40,数据结构与STL,最好情况正序序列:比较 移动最坏情况逆序序列:比较 移动平均情况时间复杂度 O(n2) 空间复杂度 O(1),n-1,0,4.快速排序,快速排序是起泡排序的改进改进着眼点 起泡排序:记录的比较和移动是在相邻位置进行,需要比较移动多次才能到最终的位置。 快速排序:记录的比较和移动从两端向中间进行的,记录移动的距离较远。,2022/12/25,41,数据结构与STL,4.快速排序,快速排序又叫分区交换排序,其基本思想:1. 选择一个记录作为轴值,将记录分成2部分。2. 分别对这两部分重复上述过程。,2022/12/2
16、5,42,数据结构与STL,递归,4.快速排序,需要解决的问题1. 如何选择基准记录? 记录集中的第一个记录。2. 如何分区,使大于基准的记录后移,小于基准的记录前移?3. 如何判决快速排序结束?递归缩小分区,直到分区只有一个记录。,2022/12/25,43,数据结构与STL,2. 如何分区?,分区算法 初始化 取第一个记录R1作为基准 i 基准左侧待比较的记录, 初始i=1 j 基准右侧待比较的记录, 初始j=n 右侧扫描 从后向前找到第一个比基准小的记录,和基准交换 左侧扫描 从前到后找到第一个比基准大的记录,和基准交换 反复执行,直到i=j结束,2022/12/25,44,数据结构与S
17、TL,2. 如何分区?,2022/12/25,45,21,25,49,25*,16,08,0 1 2 3 4 5,pivot,j,i,数据结构与STL,2. 如何分区?,2022/12/25,46,一趟快速排序结束,待排序序列被分成两个子序列,再分别进行快速排序。,数据结构与STL,一趟快速排序,int Partion(int r, int i, int j)int pivot=ri;while (i=pivot) j-;rj ri;while(ij) ,2022/12/25,47,数据结构与STL,5快速排序(改进),改进出发点 一趟快速排序: 每交换一对记录需要进行三次移动,而实际上排序过
18、程中对pivot的位置交换是多余的,只有i=j的位置才是pivot的位置。 所以,可以将pivot保存在r0中,排序过程中只有ri和rj移动。,2022/12/25,48,数据结构与STL,2)分区改进,分区算法 初始化 取第一个记录作为基准,保存在任意位置 i 基准左侧待比较的记录, 初始i=1 j 基准右侧待比较的记录, 初始j=n 右侧扫描 从后向前找到第一个比基准小的记录,移至位置i 左侧扫描 从前到后找到第一个比基准大的记录,移至位置j 反复执行,直到i=j结束,将r0移至ri。,2022/12/25,49,数据结构与STL,21,25,49,25*,16,08,0 1 2 3 4
19、5 6,pivot,j,i,21,2022/12/25,50,数据结构与STL,5快速排序(改进),2022/12/25,51,一趟快速排序结束,待排序序列被分成两个子序列,再分别进行快速排序。,数据结构与STL,一趟快速排序(改进),int Partion(int r , int first, int end)int i=first; int j=end; int pivot = ri; /选取基准记录while (i=pivot)/右侧扫描 j-;ri + = rj;while(ij) ,2022/12/25,52,数据结构与STL,5快速排序(改进),2022/12/25,53,数据结构
20、与STL,5.快速排序,void Qsort(int r, int i, int j)if ( ij )int pivotloc = Partion(r, i, j); Qsort( r, i, pivotloc-1); Qsort( r, pivotloc+1, j);,2022/12/25,54,数据结构与STL,5.快速排序的性能分析,最好情况每次划分的左侧序列和右侧序列的长度相同。表长为n的序列可划分log2n层。定位一个记录要对整个待划分序列扫描一遍,所需时间O(n)。 总的时间复杂度O(nlog2n)。,2022/12/25,55,数据结构与STL,5.快速排序的性能分析,2022
21、/12/25,56,数据结构与STL,最坏情况待排序记录为逆序或正序,每次划分只得到比上一次少一个的子序列,此时必须要n-1次递归,第i 次需要n-i次比较,所以,总的比较次数: 记录的移动次数=比较次数,所以总的时间复杂度O(n2),5.快速排序的性能分析,平均性能时间复杂度O(nlog2n)栈的深度O(log2n)特点快速排序是一种不稳定的排序方法,2022/12/25,57,数据结构与STL,第八章 排序,学习内容: 1. 概述 2. 插入排序 3. 交换排序 4. 选择排序5. 归并排序6. 排序比较7. 外部排序8. STL 中相关排序算法,2022/12/25,58,4. 选择排序
22、,数据结构与STL,选择排序,主要内容 1存储结构 2简单选择排序 3堆排序,2022/12/25,59,数据结构与STL,1存储结构,排序使用顺序结构为了关注排序算法本身,所以本章所有排序的存储结构是0号位置留空的整型一维数组。 int rn+1; r1,r2,rn选择排序的特征每趟排序在待排序序列中选择关键码最小的记录,添加到有序序列中。,2022/12/25,60,数据结构与STL,2.简单选择排序,基本思想 第 i 趟排序在无序序列ri.n 中选择关键码最小的记录,与ri交换,使有序序列不断增长直到全部排序完毕。,2022/12/25,61,r1r2 ri-1 |ri ri+1 rmi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序 ppt 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-1913426.html