北邮数据结构排序课件培训资料.ppt





《北邮数据结构排序课件培训资料.ppt》由会员分享,可在线阅读,更多相关《北邮数据结构排序课件培训资料.ppt(117页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、北邮数据结构排序课件北邮数据结构排序课件第八章第八章 排序排序学习内容:学习内容:1.1.概述概述 2.2.插入排序插入排序 3.3.交换排序交换排序 4.4.选择排序选择排序 5.5.归并排序归并排序6.6.排序比较排序比较7.7.外部排序外部排序8.STL 8.STL 中相关排序算法中相关排序算法1.1.概述概述2022/11/182数据结构与数据结构与STL1 1 概述概述排序排序 给定一个记录序列,按照每个记录的关键码将给定一个记录序列,按照每个记录的关键码将记录进行重新排列,使关键码从小到大记录进行重新排列,使关键码从小到大/从大从大到小有序。到小有序。正序:关键码从小到大排列正序:
2、关键码从小到大排列逆序:关键码从大到小排列逆序:关键码从大到小排列2022/11/183数据结构与数据结构与STL1 1 概述概述趟趟 在排序算法中,将待排序的记录扫描一遍称为一在排序算法中,将待排序的记录扫描一遍称为一趟。趟。稳定性稳定性 待排序记录中具有相同关键码的记录,若排序前待排序记录中具有相同关键码的记录,若排序前后,这些记录的相对位置不变,则为稳定排序;后,这些记录的相对位置不变,则为稳定排序;否则为不稳定。否则为不稳定。2022/11/184数据结构与数据结构与STL1 1 概述概述排序的分类排序的分类 根据是否将全部记录放进内存,分为内部排序根据是否将全部记录放进内存,分为内部
3、排序和外部排序和外部排序 根据排序的原则,可以将排序分成:根据排序的原则,可以将排序分成:插入排序 交换排序 选择排序 归并排序2022/11/185数据结构与数据结构与STL1 1 概述概述如何评价一个排序算法?如何评价一个排序算法?排序的基本操作排序的基本操作:比较和移动比较和移动主要主要:比较的次数或移动次数较少的算法性能较好。比较的次数或移动次数较少的算法性能较好。次要次要:空间复杂度空间复杂度.算法本身的复杂度算法本身的复杂度2022/11/186数据结构与数据结构与STL第八章第八章 排序排序学习内容:学习内容:1.1.概述概述 2.2.插入排序插入排序 3.3.交换排序交换排序
4、4.4.选择排序选择排序 5.5.归并排序归并排序6.6.排序比较排序比较7.7.外部排序外部排序8.STL 8.STL 中相关排序算法中相关排序算法2.2.插入排序插入排序2022/11/187数据结构与数据结构与STL插入排序插入排序主要内容主要内容1 1存储结构存储结构2 2直接插入排序直接插入排序3 3希尔排序希尔排序2022/11/188数据结构与数据结构与STL1 1存储结构存储结构排序使用顺序结构排序使用顺序结构 为了关注排序算法本身,所以本章所有排序的存为了关注排序算法本身,所以本章所有排序的存储结构是储结构是0 0号位置留空的整型一维数组。号位置留空的整型一维数组。int r
5、n;2022/11/189数据结构与数据结构与STL2.2.插入排序插入排序插入排序的特征插入排序的特征类似于玩纸牌时整理手中纸牌的过程。类似于玩纸牌时整理手中纸牌的过程。寻找一个指定记录在待排序记录中的位置,然后寻找一个指定记录在待排序记录中的位置,然后插入的排序算法。插入的排序算法。2022/11/1810数据结构与数据结构与STL2.2.直接插入排序直接插入排序基本思想基本思想 每次将一个待排序的记录按其关键码的大小插入每次将一个待排序的记录按其关键码的大小插入到一个已经排序好的有序序列中,直到全部记录到一个已经排序好的有序序列中,直到全部记录排序好。排序好。r r1 1rr2 2 r
6、ri-1 i-1|r|ri i r ri+1 i+1 r rn n有序区无序区插入到合适的位置2022/11/1811数据结构与数据结构与STL2.2.直接插入排序直接插入排序需要解决的问题需要解决的问题 1 1)如何构造初始有序序列?)如何构造初始有序序列?2 2)如何找到插入的位置?)如何找到插入的位置?r r1 1rr2 2 r ri-1 i-1|r|ri i r ri+1 i+1 r rn n有序区无序区插入到合适的位置2022/11/1812数据结构与数据结构与STL1 1)如何构造初始有序序列?)如何构造初始有序序列?有序序列r1无序序列 r3.nr2第一趟第一趟 有序序列r1.2
7、无序序列 r4.nr3第二趟第二趟第第n-1n-1趟趟 有序序列r1.n-1rn2022/11/1813数据结构与数据结构与STL 直接插入排序的过程直接插入排序的过程初始序列初始序列1215 9 20 10 31 24第一趟第一趟12 15 9 20 10 31 24第二趟第二趟9 12 1520 10 31 24第三趟第三趟9 12 15 2010 31 24第四趟第四趟9 10 12 15 20 31 24第五趟第五趟9 10 12 15 20 31 24第六趟第六趟9 10 12 15 20 24 312022/11/1814数据结构与数据结构与STL2 2)如何找到插入的位置?)如何
8、找到插入的位置?基本思想基本思想 设置设置r0r0为为“哨兵哨兵”,从后向前查找有序区,边,从后向前查找有序区,边查找边后移,直到找到合适的位置,将查找边后移,直到找到合适的位置,将r0r0插入。插入。r r1 1rr2 2 r ri-1 i-1|r|ri i r ri+1 i+1 r rn n有序区无序区插入到合适的位置r0=ri;for(int j=i-1;r0rj;j-)rj+1=rj;rj+1=r0;if(riri-1)r0=ri;for(int j=i-1;r0rj;j-)rj+1=rj;rj+1=r0;2022/11/1815数据结构与数据结构与STL2.2.直接插入排序的算法直接
9、插入排序的算法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/11/1816数据结构与数据结构与STL2.2.直接插入排序的性能分析直接插入排序的性能分析最好情况最好情况正序序列:比较正序序列:比较 移动移动最坏情况最坏情况逆序序列:比较逆序序列:比较 移动移动平均情况平均情况时间复杂度时间复杂度O(nO(n2 2)空间复杂度空间复杂度O(1)O(1)n-102022/11/1817数据
10、结构与数据结构与STL2.2.直接插入排序的特点直接插入排序的特点稳定性稳定性插入排序是一种稳定的排序算法插入排序是一种稳定的排序算法适用性适用性 尤其适合待排序记录基本有序的情况尤其适合待排序记录基本有序的情况2022/11/1818数据结构与数据结构与STL3.3.希尔排序希尔排序希尔排序是对插入排序的一种改进希尔排序是对插入排序的一种改进,原因原因1)1)基本有序的序列,直接插入最快基本有序的序列,直接插入最快2)2)无序序列,记录数很少时,也很快无序序列,记录数很少时,也很快基本思想基本思想 将待排序的记录集分成多个子集,分别对这些子将待排序的记录集分成多个子集,分别对这些子集进行排序
11、,待整个序列基本有序时,在对记录集进行排序,待整个序列基本有序时,在对记录进行一次直接插入排序。进行一次直接插入排序。2022/11/1819数据结构与数据结构与STL3.3.希尔排序希尔排序49 38 65 97 76 13 27 49 55 04原始序列 d=10/2=513 27 49 55 04 49 38 65 97 76第一趟 d=5/2=22022/11/1820数据结构与数据结构与STL3.3.希尔排序希尔排序04 27 13 49 38 55 49 65 97 76第二趟第二趟 d=2/2=104 13 27 38 49 49 55 65 76 97第三趟第三趟2022/11
12、/1821数据结构与数据结构与STL3.3.希尔排序(缩小增量排序)希尔排序(缩小增量排序)具体排序过程具体排序过程设待排序对象序列有设待排序对象序列有 n 个记录个记录,先取先取 d=1;d=d/2)/以以d为增量为增量 以以d为增量,在子序列中进行插入排序。为增量,在子序列中进行插入排序。2022/11/1823数据结构与数据结构与STL希尔排序希尔排序假设增量假设增量=d,则一趟希尔排序的过程,则一趟希尔排序的过程for(int i=d+1;i=n;i+)/一趟希尔排序一趟希尔排序 if(ri 0&r0=1;d=d/2)/以以d为增量为增量 for(int i=d+1;i=n;i+)/一
13、趟希尔排序一趟希尔排序 if(ri 0&r0rj;j=j-d)rj+d=rj;rj+d=r0;2022/11/1826数据结构与数据结构与STL3.3.希尔排序的性能分析希尔排序的性能分析时间复杂度时间复杂度希尔排序的时间与希尔排序的时间与“增量序列增量序列”有关,不同的有关,不同的“增量序列增量序列”时间复杂度不同。时间复杂度不同。经过大量的实验,时间复杂度经过大量的实验,时间复杂度O(n2)和和 O(nlog2n)之间之间稳定性稳定性 希尔排序是一种不稳定的排序算法希尔排序是一种不稳定的排序算法2022/11/1827数据结构与数据结构与STL第八章第八章 排序排序学习内容:学习内容:1.
14、1.概述概述 2.2.插入排序插入排序 4.4.选择排序选择排序 5.5.归并排序归并排序6.6.排序比较排序比较7.7.外部排序外部排序8.STL 8.STL 中相关排序算法中相关排序算法3.3.交换排序交换排序2022/11/1828数据结构与数据结构与STL交换排序交换排序主要内容主要内容 1 1存储结构存储结构 2 2起泡排序起泡排序 3 3起泡排序(改进)起泡排序(改进)4 4快速排序快速排序 5 5快速排序(改进)快速排序(改进)2022/11/1829数据结构与数据结构与STL1 1存储结构存储结构排序使用顺序结构排序使用顺序结构 为了关注排序算法本身,所以本章所有排序的存为了关
15、注排序算法本身,所以本章所有排序的存储结构是储结构是0 0号位置留空的整型一维数组。号位置留空的整型一维数组。int rn;交换排序的特征交换排序的特征 在待排序的记录中选择两个记录,将它们的关在待排序的记录中选择两个记录,将它们的关键码进行比较,如果反序则交换它们的位置。键码进行比较,如果反序则交换它们的位置。2022/11/1830数据结构与数据结构与STL2.2.起泡排序起泡排序基本思想基本思想 两两比较相邻的记录两两比较相邻的记录,如果反序如果反序,则交换位置则交换位置,直直到没有反序的记录为止。到没有反序的记录为止。无序序列r1.i 有序序列 ri+1.n反序则交换标记2022/11
16、/1831数据结构与数据结构与STL起泡排序的过程起泡排序的过程第一趟第一趟初始状态初始状态2022/11/1832数据结构与数据结构与STL第二趟第二趟无序区无序区有序区有序区无序区无序区有序区有序区2022/11/1833数据结构与数据结构与STL2.2.起泡排序起泡排序void BubbleSort(int r,int n)/外循环:总共需要遍历的趟数外循环:总共需要遍历的趟数 for(int i=1;in;i+)/n-1趟趟 /内循环:每一趟需要比较的次数内循环:每一趟需要比较的次数for(int j=1;j rj+1)/相邻元素比较相邻元素比较 r0=rj;rj=rj+1;rj+1=
17、r0;2022/11/1834数据结构与数据结构与STL3.3.起泡排序(改进)起泡排序(改进)初始序列初始序列50 13 55 97 27 38 49 65第一趟第一趟13 50 55 97 27 38 49 6513 50 55 27 97 38 49 6513 50 55 27 38 97 49 6513 50 55 27 38 49 97 6513 50 55 27 38 49 6597pos第二趟第二趟13 50 27 55 38 49 659713 50 27 38 55 49 659713 50 27 38 49 55 65 97pospos=n2022/11/1835数据结构与
18、数据结构与STL3.3.起泡排序(改进)起泡排序(改进)第三趟第三趟13 27 50 38 49 55 65 9713 27 38 50 49 55 65 9713 27 38 49 50 55 65 97pos第四趟第四趟13 27 38 49 50 55 65 97pos2022/11/1836数据结构与数据结构与STL3.3.起泡排序(改进)起泡排序(改进)具体过程具体过程1)初始状态无序区为)初始状态无序区为r1.n2)对无序区从前向后,依次比较相邻记录,若反)对无序区从前向后,依次比较相邻记录,若反序则交换,并记录交换的位置序则交换,并记录交换的位置pos。最后一次交换。最后一次交换
19、的位置的位置pos,就是下一趟无序区,就是下一趟无序区r1.pos3)反复执行)反复执行2),直到无序区中没有反序的记录),直到无序区中没有反序的记录2022/11/1837数据结构与数据结构与STL3.3.起泡排序(改进)起泡排序(改进)已知无序区已知无序区r1.pos,则如何进行反序交换,则如何进行反序交换?int bound=pos;/带排序记录右边界带排序记录右边界pos=0;/标记,记录交换的位置标记,记录交换的位置 for(int i=1;iri+1)r0=ri;ri=ri+1;ri+1=r0;pos=i;/记录最后交换的位置记录最后交换的位置 2022/11/1838数据结构与数
20、据结构与STL3.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/11/1839数据结构与数据结构与STL3.3.起泡排序的性能分析起泡排序的性能分析最好情况最好情况正序序列:比较 移动最坏情况最坏情况逆序序列:比较 移动平均情况平均情况时间复杂度 O(n2)空间复杂度 O(1)n-1
21、02022/11/1840数据结构与数据结构与STL4.4.快速排序快速排序快速排序是起泡排序的改进快速排序是起泡排序的改进改进着眼点改进着眼点 起泡排序:记录的比较和移动是在相邻位置进行,起泡排序:记录的比较和移动是在相邻位置进行,需要比较移动多次才能到最终的位置。需要比较移动多次才能到最终的位置。快速排序:记录的比较和移动从两端向中间进行快速排序:记录的比较和移动从两端向中间进行的,记录移动的距离较远。的,记录移动的距离较远。2022/11/1841数据结构与数据结构与STL4.4.快速排序快速排序快速排序又叫分区交换排序,其基本思想:快速排序又叫分区交换排序,其基本思想:1.1.选择一个
22、记录作为轴值,将记录分成选择一个记录作为轴值,将记录分成2 2部分。部分。2.2.分别对这两部分重复上述过程。分别对这两部分重复上述过程。rr1 1 r r2 2 r ri-1 i-1 r ri i r ri+1 i+1 r ri+2 i+2 r rn n 全部全部=ri 递归递归2022/11/1842数据结构与数据结构与STL4.4.快速排序快速排序需要解决的问题需要解决的问题1.1.如何选择如何选择基准基准记录?记录?记录集中的第一个记录。2.2.如何分区,使如何分区,使大于大于基准的记录基准的记录后移后移,小于小于基准基准的记录的记录前移?前移?3.3.如何判决快速排序结束?如何判决快
23、速排序结束?递归缩小分区,直到分区只有一个记录。rr1 1 r r2 2rri-1 i-1 r ri i r ri+1 i+1 r ri+2 i+2 r rn n 全部全部=ri 2022/11/1843数据结构与数据结构与STL2.2.如何分区?如何分区?分区算法分区算法 初始化初始化 取第一个记录R1作为基准 i 基准左侧待比较的记录,初始i=1 j 基准右侧待比较的记录,初始j=n 右侧扫描右侧扫描 从后向前找到第一个比基准小的记录,和基准交换 左侧扫描左侧扫描 从前到后找到第一个比基准大的记录,和基准交换 反复执行反复执行,直到,直到i=ji=j结束结束2022/11/1844数据结构
24、与数据结构与STL2.2.如何分区?如何分区?21212121252525254949494925*25*25*25*16161616080808080 1 2 3 4 50 1 2 3 4 5pivotji25*25*25*25*252525251616161649494949080808082121212125*25*25*25*252525251616161649494949080808082121212125*25*25*25*25252525161616160808080821212121494949492022/11/1845数据结构与数据结构与STL2.2.如何分区?如何分区?4
25、949494925*25*25*25*25252525161616160808080821212121一趟快速排序结束,待排序序列被分成两个子序列,再分别进行快速排序。2121212125*25*25*25*252525251616161649494949080808082022/11/1846数据结构与数据结构与STL一趟快速排序一趟快速排序int Partion(int r,int i,int j)int pivot=ri;while(ij)while(i=pivot)j-;rj ri;while(ij)&(ri=pivot)i+;rj ri;return i;2022/11/1847数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序 课件 培训资料

限制150内