数据结构课件第十章2分解优秀PPT.ppt
《数据结构课件第十章2分解优秀PPT.ppt》由会员分享,可在线阅读,更多相关《数据结构课件第十章2分解优秀PPT.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10.1 10.1 概述概述10.2 10.2 插入排序插入排序10.3 10.3 交换排序交换排序10.4 10.4 选择排序选择排序10.5 10.5 归并排序归并排序10.6 10.6 基数排序基数排序第第1010章章 内部排序内部排序110.2 10.2 插入排序插入排序插入排序有多种具体实现算法:插入排序有多种具体实现算法:1)干脆插入排序干脆插入排序2)折半插入排序折半插入排序3)2-路插入排序路插入排序4)表插入排序表插入排序5)希尔排序希尔排序边插入边排序,保证子序列中随时都是排好序的。边插入边排序,保证子序列中随时都是排好序的。边插入边排序,保证子序列中随时都是排好序的。边插
2、入边排序,保证子序列中随时都是排好序的。小改进小改进大改进大改进2课堂练习:课堂练习:以以关关键键字字序序列列(256,301,751,129,937,863,742,694,076,438)为为例例,分分别别写写出出执执行行以以下下算算法法的的各各趟趟排排序序结结束束时时,关关键键字字序序列列的的状状态态,并并说说明明这这些些排排序序方方法法中中,哪哪些些易易于于在在链链表表(包包括括各各种种单单、双双、循循环环链链表表)上上实现?实现?干脆插入排序干脆插入排序希尔排序(取希尔排序(取dk=5,3,1)答:明显,干脆插入排序方法易于在链表上实现;但希尔排答:明显,干脆插入排序方法易于在链表上
3、实现;但希尔排序方法因为是按增量选择记录,不易于在链表上实现。序方法因为是按增量选择记录,不易于在链表上实现。两种排序方法的中间状态分别描述如后:两种排序方法的中间状态分别描述如后:3原始序列:原始序列:256256,301301,751751,129129,937937,863863,742742,694694,076076,438438 256256,301301,751751,129129,937937,863863,742742,694694,076076,438438 256256,301301,751751,129129,937937,863863,742742,694694,07
4、6076,438438 129129,256256,301301,751751,937937,863863,742742,694694,076076,438438 129129,256256,301301,751751,937937,863863,742742,694694,076076,438438 129129,256256,301301,751751,863863,937937,742742,694694,076076,438438 129129,256256,301301,742742,751751,863863,937937,694694,076076,438438 129129,2
5、56256,301301,694694,742742,751751,863863,937937,076076,438438 076076,129129,256256,301301,694694,742742,751751,863863,937937,438438 076076,129129,256256,301301,438438,694694,742742,751751,863863,937937 第第1趟趟第第2趟趟第第3趟趟第第4趟趟第第5趟趟第第6趟趟第第7趟趟第第8趟趟第第9趟趟4原始序列:原始序列:256256,301301,751751,129129,937937,863863,
6、742742,694694,076076,438438(取取取取dk=5,3,1)dk=5,3,1)256256,301301,751751,129129,937937,863863,742742,694694,076076,438438256256,301301,751751,129129,937937,863863,742742,694694,076076,438438256256,301301,694694,129129,937937,863863,742742,751751,076076,438438256256,301301,694694,076076,937937,863863,7
7、42742,751751,129129,438438256256,301301,694694,076076,438438,863863,742742,751751,129129,937937第第1趟趟dk=5dk=5第第2趟趟dk=3dk=3第第3趟趟dk=1dk=1256256,301301,694694,076076,438438,863863,742742,751751,129129,937937256256,301301,694694,076076,438438,863863,742742,751751,129129,937937076076,301301,694694,256256,
8、438438,863863,742742,751751,129129,937937076076,301301,694694,256256,438438,863863,742742,751751,129129,937937076076,301301,694694,256256,438438,863863,742742,751751,129129,937937076076,301301,129129,256256,438438,694694,742742,751751,863863,937937076076,301301,129129,256256,438438,694694,742742,751
9、751,863863,937937076076,301301,129129,256256,438438,694694,742742,751751,863863,937937076076,129129,256256,301301,438438,694694,742742,751751,863863,9379375voidShellSort(SqList&L,intdlta,intt)/按增量序列按增量序列dlta0t-1对依次表对依次表L作作Shell排序排序for(k=0;kt;+k)ShellSort(L,dltak);/ShellSort时间效率:时间效率:空间效率:空间效率:O O O
10、O(1 1 1 1)因为仅占用因为仅占用1 1个缓冲单元个缓冲单元(与算法有关)与算法有关)算法的稳定性:算法的稳定性:不稳定不稳定不稳定不稳定因为因为4949*排序后却到了排序后却到了4949的前面的前面希尔排序算法希尔排序算法希尔排序算法希尔排序算法(主程序)(主程序)(主程序)(主程序)参见教材参见教材P272P272O(n1.25O(n1.25O(n1.25O(n1.25)O O O O(1.6n1.251.6n1.251.6n1.251.6n1.25)由阅历公式得由阅历公式得由阅历公式得由阅历公式得到到到到dkdk值依次装在值依次装在dltadltat t 中中/增量为增量为dlta
11、k的一趟插入排序的一趟插入排序6理解难点:理解难点:整理动作是二合一的,整理动作是二合一的,r0仍是每个仍是每个dk子集的哨兵,用于子集的彻子集的哨兵,用于子集的彻底排序!底排序!for(i=dk+1;i=L.length;+i)if(ri.key0&(r0.key0&(r0.keyrj.key);j-=dk)rj+dk=rj;rj+dk=r0;5 7 45 7 4 i=1 i+dk=6 i+2dk=11 i=1 i+dk=6 i+2dk=11 假如不用假如不用forfor循环,比较的结果是循环,比较的结果是 5 5,4 4,7 7 只有执行只有执行forfor循环后,比较结果才会是循环后,比
12、较结果才会是 4 4,5 5,7 7for(i=dk+1;i=L.length;+i)if(ri.keyri-dk.key)r0=ri;大者后移大者后移空间效率与算法设计有关空间效率与算法设计有关810.3 10.3 交换排序交换排序两两比较待排序记录的关键码,假如发生逆序两两比较待排序记录的关键码,假如发生逆序两两比较待排序记录的关键码,假如发生逆序两两比较待排序记录的关键码,假如发生逆序(即排列依次与排序后的次序正好相反),则交换之,(即排列依次与排序后的次序正好相反),则交换之,(即排列依次与排序后的次序正好相反),则交换之,(即排列依次与排序后的次序正好相反),则交换之,直到全部记录都
13、排好序为止。直到全部记录都排好序为止。直到全部记录都排好序为止。直到全部记录都排好序为止。交换排序的主要算法有:交换排序的主要算法有:1)冒泡排序冒泡排序2)快速排序快速排序交换排序的基本思想是:交换排序的基本思想是:交换排序的基本思想是:交换排序的基本思想是:91)冒泡排序冒泡排序冒泡排序冒泡排序基本思路:每趟不断将记录两两比较,并按基本思路:每趟不断将记录两两比较,并按“前小后大前小后大”(或(或“前大后小前大后小”)规则交换。)规则交换。优点:每趟结束时,不仅能挤出一个最大值到最终面位置,优点:每趟结束时,不仅能挤出一个最大值到最终面位置,还能同时部分理顺其他元素;一旦下趟没有交换发还能
14、同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。生,还可以提前结束排序。前提:依次存储结构前提:依次存储结构 例:关键字序列例:关键字序列T=(21,25,49,25*,16,08),请写出),请写出冒泡排序的具体实现过程。冒泡排序的具体实现过程。21,25,49,25*,16,0821,25,25*,16,08,4921,25,16,08,25*,4921,16,08,25,25*,4916,08,21,25,25*,4908,16,21,25,25*,49初态:初态:第第1趟趟第第2趟趟第第3趟趟第第4趟趟第第5趟趟10冒泡排序的算法分析冒泡排序的算法分析最好状况:初始排列
15、已经有序,只执行一趟起泡,做最好状况:初始排列已经有序,只执行一趟起泡,做n-1次关键码比较,不移动对象。次关键码比较,不移动对象。最坏情形:初始排列逆序,算法要执行最坏情形:初始排列逆序,算法要执行n-1趟起泡,第趟起泡,第i趟趟(1i n)做了做了n-i次关键码比较,执行了次关键码比较,执行了n-i次对象交换。此次对象交换。此时的比较总次数时的比较总次数KCN和记录移动次数和记录移动次数RMN为:为:因此:因此:因此:因此:时间效率:时间效率:时间效率:时间效率:O O O O(n2)n2)n2)n2)因为要考虑最坏状况因为要考虑最坏状况因为要考虑最坏状况因为要考虑最坏状况空间效率:空间效
16、率:空间效率:空间效率:O O O O(1 1 1 1)只在交换时用到一个缓冲单元只在交换时用到一个缓冲单元只在交换时用到一个缓冲单元只在交换时用到一个缓冲单元稳稳稳稳 定定定定 性:性:性:性:稳定稳定稳定稳定 25 25 25 25和和和和25*25*25*25*在排序前后的次序未变更在排序前后的次序未变更在排序前后的次序未变更在排序前后的次序未变更11 冒泡排序的优点:冒泡排序的优点:冒泡排序的优点:冒泡排序的优点:每一趟整理元素时,不仅可以完全确定一每一趟整理元素时,不仅可以完全确定一每一趟整理元素时,不仅可以完全确定一每一趟整理元素时,不仅可以完全确定一个元素的位置(挤出一个泡到表尾
17、),还可以对前面的元个元素的位置(挤出一个泡到表尾),还可以对前面的元个元素的位置(挤出一个泡到表尾),还可以对前面的元个元素的位置(挤出一个泡到表尾),还可以对前面的元素作一些整理,所以比一般的排序要快。素作一些整理,所以比一般的排序要快。素作一些整理,所以比一般的排序要快。素作一些整理,所以比一般的排序要快。有没有比冒泡排序更快的算法?有没有比冒泡排序更快的算法?有没有比冒泡排序更快的算法?有没有比冒泡排序更快的算法?有!有!有!有!快速排序法快速排序法快速排序法快速排序法全球公认!全球公认!全球公认!全球公认!因为它每趟都能精确定位不止因为它每趟都能精确定位不止因为它每趟都能精确定位不止
18、因为它每趟都能精确定位不止1 1 1 1个个个个元素!元素!元素!元素!122 2)快速排序快速排序快速排序快速排序从待排序列中任取一个元素从待排序列中任取一个元素从待排序列中任取一个元素从待排序列中任取一个元素(例如取第一个例如取第一个例如取第一个例如取第一个)作为中心,作为中心,作为中心,作为中心,全部比它小的元素一律前放,全部比它大的元素一律后放,全部比它小的元素一律前放,全部比它大的元素一律后放,全部比它小的元素一律前放,全部比它大的元素一律后放,全部比它小的元素一律前放,全部比它大的元素一律后放,形成左右两个子表;形成左右两个子表;形成左右两个子表;形成左右两个子表;然后再对各子表重
19、新选择中心元素并依此规则调整,直然后再对各子表重新选择中心元素并依此规则调整,直然后再对各子表重新选择中心元素并依此规则调整,直然后再对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。到每个子表的元素只剩一个。此时便为有序序列了。到每个子表的元素只剩一个。此时便为有序序列了。到每个子表的元素只剩一个。此时便为有序序列了。基本思想:基本思想:基本思想:基本思想:优点:因为每趟可以确定不止一个元素的位置,而且呈指数增优点:因为每趟可以确定不止一个元素的位置,而且呈指数增优点:因为每趟可以确定不止一个元素的位置,而且呈指数增优点:因为每趟可以确定不止一个元素的位
20、置,而且呈指数增加,所以特殊快!加,所以特殊快!加,所以特殊快!加,所以特殊快!前提:依次存储结构前提:依次存储结构前提:依次存储结构前提:依次存储结构 13(),设以首元素为枢轴中心设以首元素为枢轴中心例例1:关键字序列关键字序列T=(21,25,49,25*,16,08),请),请写出快速排序的算法步骤。写出快速排序的算法步骤。21,25,49,25*,16,08初态:初态:第第1趟:趟:第第2趟:趟:第第3趟:趟:探讨:探讨:探讨:探讨:1.1.这种不断划分子表的过程,计算机如何自动实现?这种不断划分子表的过程,计算机如何自动实现?这种不断划分子表的过程,计算机如何自动实现?这种不断划分
21、子表的过程,计算机如何自动实现?2.“2.“快速排序快速排序快速排序快速排序”是否真的比任何排序算法都快?是否真的比任何排序算法都快?是否真的比任何排序算法都快?是否真的比任何排序算法都快?08,16,21,25,25*,(49)2116,08,()25,25*,49(08),16,21,25,(25*,49)14pivotkey=21pivotkey=21(08,16)21(25*,49,25)Low=high=Low=high=Low=high=Low=high=3 3 3 3,本趟停止,将本趟停止,将本趟停止,将本趟停止,将中枢点定位并返回位置信息中枢点定位并返回位置信息中枢点定位并返回
22、位置信息中枢点定位并返回位置信息例例2:关键字序列关键字序列T=(21,25,49,25*,16,08),计算),计算机如何实现快速排序算法的某机如何实现快速排序算法的某一趟一趟过程?过程?ri0123456初态初态21254925*1608第第1趟趟highhighlowlow2125*3210825164925252525*跑到了前面,跑到了前面,跑到了前面,跑到了前面,不稳定不稳定不稳定不稳定!设计技巧:交替设计技巧:交替/振荡式靠近振荡式靠近15例例3:以关键字序列(以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的)
23、为例,写出执行快速算法的各趟各趟排排序结束时,关键字序列的状态。序结束时,关键字序列的状态。原始序列:原始序列:256256,301301,751751,129129,937937,863863,742742,694694,076076,438438第第1趟趟第第2趟趟第第3趟趟第第4趟趟256256,301301,751751,129129,937937,863863,742742,694694,076076,438438076076076076,129129,256256256256,751751751751,937937,863863,742742,694694,301301,43843
24、8意即模拟算法实现步骤意即模拟算法实现步骤256256256256076076301301129129751751256256256256076076076076,129129,256256256256,438438,301301,694694,742742,694694,863863,937937751751751751076076076076,129129129129,256256256256,438438438438,301301,694694,742742,751751751751,863863863863,937937076076076076,129129129129,2562562
25、56256,301301,301301,694694,742742,751751751751,863863863863,937937438438438438076076076076,129129129129,256256256256,301301301301,438438438438,694694694694,742742,751751751751,863863863863,937937937937时间效率:时间效率:时间效率:时间效率:O(nlog2n)O(nlog2n)O(nlog2n)O(nlog2n)因为每趟确定的元素呈指数增加因为每趟确定的元素呈指数增加因为每趟确定的元素呈指数增加因
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 第十 分解 优秀 PPT
限制150内