《数据结构与算法》第十章内部排序分析优秀PPT.ppt
《《数据结构与算法》第十章内部排序分析优秀PPT.ppt》由会员分享,可在线阅读,更多相关《《数据结构与算法》第十章内部排序分析优秀PPT.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十章第十章 内部排序内部排序10.1 概述概述10.2 插入排序插入排序10.3 快速排序快速排序10.4 选择选择排序排序10.5 归归并排序并排序10.6 基数排序基数排序10.7 各种排序方法比各种排序方法比较较101概述概述一、排序的定一、排序的定一、排序的定一、排序的定义义义义 假假假假设设设设有有有有n n个个个个记录记录记录记录的序列的序列的序列的序列为为为为:R1R1,R2R2,,Rn,Rn 其其其其对应对应对应对应的关的关的关的关键键键键字字字字为为为为K1K1,K2K2,,Kn,Kn 须须须须要确定要确定要确定要确定1 1,2 2,,n,n的一种排列的一种排列的一种排列的
2、一种排列P1P1,P2P2,,Pn,Pn 使:使:使:使:Kp1Kp1K p2K p2K p nK p n 则则则则R p1R p1,R p2R p2,,R pn,R pn为为为为一个按关一个按关一个按关一个按关键键键键字有序的序列。字有序的序列。字有序的序列。字有序的序列。其中,其中,其中,其中,KiKi可以是可以是可以是可以是记录记录记录记录RiRi的主关的主关的主关的主关键键键键字、次关字、次关字、次关字、次关键键键键字或若干数字或若干数字或若干数字或若干数据据据据项项项项的的的的组组组组合。合。合。合。二、排序方法的二、排序方法的二、排序方法的二、排序方法的稳稳稳稳定性定性定性定性 若
3、若若若K Ki i=K=Kj j,(1,(1 i i j j n),n),且排序前,且排序前,且排序前,且排序前,R Ri i在在在在R Rj j前面,前面,前面,前面,若排序后,若排序后,若排序后,若排序后,R Ri i仍在仍在仍在仍在R Rj j前面前面前面前面 则则则则称称称称该该该该排序算法是排序算法是排序算法是排序算法是稳稳稳稳定的,否定的,否定的,否定的,否则则则则是不是不是不是不稳稳稳稳定的。定的。定的。定的。三、排序分三、排序分三、排序分三、排序分类类类类依据待排序的依据待排序的依据待排序的依据待排序的记录记录记录记录的数量划分:的数量划分:的数量划分:的数量划分:内部排序:内
4、部排序:内部排序:内部排序:待排序的待排序的待排序的待排序的记录记录记录记录存放在存放在存放在存放在计计计计算机的内存中的排序算机的内存中的排序算机的内存中的排序算机的内存中的排序过过过过程程程程外部排序:外部排序:外部排序:外部排序:待待待待排排排排序序序序的的的的记记记记录录录录数数数数量量量量很很很很大大大大,内内内内存存存存一一一一次次次次放放放放不不不不下下下下全全全全部部部部记记记记录录录录,在在在在排序排序排序排序过过过过程中程中程中程中还还还还需需需需访问访问访问访问外存的排序外存的排序外存的排序外存的排序过过过过程。程。程。程。四、内部排序方法四、内部排序方法四、内部排序方法
5、四、内部排序方法 插入排序插入排序插入排序插入排序 交交交交换换换换排序排序排序排序 选择选择选择选择排序排序排序排序 归归归归并排序并排序并排序并排序 基数排序基数排序基数排序基数排序五、待排序五、待排序五、待排序五、待排序记录记录记录记录的存的存的存的存储储储储方式方式方式方式 存放在地址存放在地址存放在地址存放在地址连续连续连续连续的一的一的一的一组组组组存存存存储单储单储单储单元元元元-约约约约定定定定 存放在静存放在静存放在静存放在静态链态链态链态链表表表表 存放在地址存放在地址存放在地址存放在地址连续连续连续连续的一的一的一的一组组组组存存存存储单储单储单储单元,另元,另元,另元,
6、另设设设设一一一一组组组组索引指索引指索引指索引指针针针针#define MAXSIZE 20#define MAXSIZE 20 /一一一一个个个个用用用用作作作作示示示示例例例例的的的的小小小小依依依依次次次次表表表表的最大的最大的最大的最大长长长长度度度度typedef int KeyType;/typedef int KeyType;/定定定定义义义义关关关关键键键键字字字字类类类类型型型型为为为为整数整数整数整数类类类类型型型型typedef structtypedef struct KeyType key;KeyType key;/关关关关键键键键字字字字 InfoType oth
7、erinfo;InfoType otherinfo;/其它数据其它数据其它数据其它数据项项项项RedType;RedType;/记录类记录类记录类记录类型型型型typedef structtypedef struct RedType rMAXSIZE;RedType rMAXSIZE;/r0/r0赋赋赋赋闲闲闲闲或或或或用用用用作作作作哨哨哨哨兵兵兵兵单单单单元元元元 int length;int length;/依次表依次表依次表依次表长长长长度度度度SqList;SqList;102插入排序插入排序insert sorting一、干脆插入排序一、干脆插入排序一、干脆插入排序一、干脆插入排序
8、 方法:将一个方法:将一个方法:将一个方法:将一个记录记录记录记录插入已排好序的有序表中,得到一个插入已排好序的有序表中,得到一个插入已排好序的有序表中,得到一个插入已排好序的有序表中,得到一个新的新的新的新的记录记录记录记录数增加数增加数增加数增加1 1的有序表的有序表的有序表的有序表(1 1)把序列)把序列)把序列)把序列(R(K1)(R(K1)看成是一个有序的子序列看成是一个有序的子序列看成是一个有序的子序列看成是一个有序的子序列 把把把把R(K2)R(K2)插入到插入到插入到插入到该该该该序列中序列中序列中序列中,使插入后序列使插入后序列使插入后序列使插入后序列 (R(K1),R(K2
9、)(R(K1),R(K2)有序有序有序有序(2 2)把)把)把)把R(K3)R(K3)插入到插入到插入到插入到(R(K1),R(K2)(R(K1),R(K2)中,中,中,中,使插入后有序使插入后有序使插入后有序使插入后有序(3 3)重复()重复()重复()重复(2 2),直到插入),直到插入),直到插入),直到插入R(Kn)R(Kn)为为为为止。止。止。止。7目录页张铭、邹艳珍、刘楚雄、闫宏飞、郝丹数据结构与算法插入排序动画 123432296445347845,34,78,12,34,32,29,64 45 45 34 45 34 45 34 45 78 34 45 78 12 34 45
10、78 12 34 45 78 12 34 12 34 3434 45 78 45 78 12 32 34 12 32 34 3434 45 78 45 78 12 29 32 34 12 29 32 34 3434 45 78 45 78 12 29 32 34 34 45 64 78 12 29 32 34 34 45 64 78void InsertSort(SqList&L)void InsertSort(SqList&L)/对对对对依次表依次表依次表依次表L L做干脆插入排序做干脆插入排序做干脆插入排序做干脆插入排序 for(i=2;i=L.length;+i)for(i=2;i=L.
11、length;+i)if(LT(L.ri.key,L.ri-1.key)if(LT(L.ri.key,L.ri-1.key)/将将将将L.riL.ri插入有序子表插入有序子表插入有序子表插入有序子表 L.r0=L.ri;L.r0=L.ri;for(j=i-1;LT(L.r0.key,L.rj.key);-j)for(j=i-1;LT(L.r0.key,L.rj.key);-j)L.rj+1=L.rj;L.rj+1=L.rj;/记录记录记录记录后移后移后移后移 L.rj+1=L.r0;L.rj+1=L.r0;/插插插插入入入入到到到到正正正正确确确确位位位位置置置置 /InsertSort/In
12、sertSort算法分析算法分析稳定空间代价:O(n)时间代价:最佳状况:n-1次比较,O(n)最差状况:O(n2)比较次数为平均状况:O(n2)例例:在在序序列列13,27,35,48,65,72中中插插入入20或或603565132748722060二、折半插入排序二、折半插入排序Binary Insertsort 用折半用折半查查找的方法找到插入位置找的方法找到插入位置void BInsertSort(SqList&L)void BInsertSort(SqList&L)/对对对对依次表依次表依次表依次表L L做折半插入排序做折半插入排序做折半插入排序做折半插入排序 for(i=2;i=
13、L.length;+i)for(i=2;i=L.length;+i)L.r0=L.ri;L.r0=L.ri;/将将将将L.riL.ri暂暂暂暂存到存到存到存到L.r0L.r0 low=1;hight=i-1;low=1;hight=i-1;while(low=hight)while(low=hight+1;-j)L.rj+1=L.rj;/for(j=i-1;j=hight+1;-j)L.rj+1=L.rj;/记录记录记录记录后移后移后移后移 L.rhight+1=L.r0;L.rhight+1=L.r0;/插入到正确位置插入到正确位置插入到正确位置插入到正确位置 /BInsertSort/BI
14、nsertSort四、希四、希尔尔排序(排序(缩缩小增量排序小增量排序ShellSort)思想:先将序列转化为若干小序列,在这些小序列内进行插入排序渐渐增加小序列的规模,而削减小序列个数,使得待排序序列渐渐处于更有序的状态最终对整个序列进行一趟干脆插入排序干脆插入排序的两个特点:在最好状况下时间代价为O(n)对于短序列,干脆插入排序比较有效 按增量序列将整个待排按增量序列将整个待排记录记录分割成若干个序分割成若干个序列,分列,分别进别进行干脆插入排序。等整个序列基行干脆插入排序。等整个序列基本有序后,再本有序后,再对对全体全体记录进记录进行一次干脆插入行一次干脆插入排序。排序。基本有序:序列中
15、基本有序:序列中满满足以下特性的足以下特性的记录较记录较少少方法:方法:17目录页张铭、邹艳珍、刘楚雄、闫宏飞、郝丹数据结构与算法Shell排序动画 12343229644534781234322964453478123432296445347812343229644534781234322964453478增量序列增量序列为为:5,3,149 38 65 97 76 13 27 4913 27 49 97 76 49 38 6513 27 49 97 76 49 38 6513 27 49 38 65 49 97 7613 27 38 49 49 65 76 97void ShellInse
16、rt(SqList&L,int dk)void ShellInsert(SqList&L,int dk)/对对对对依次表依次表依次表依次表L L作一趟希作一趟希作一趟希作一趟希尔尔尔尔插入排序插入排序插入排序插入排序./本算法与一趟干脆插入排序比本算法与一趟干脆插入排序比本算法与一趟干脆插入排序比本算法与一趟干脆插入排序比较较较较,作了以下修改作了以下修改作了以下修改作了以下修改 /1./1.前后前后前后前后记录记录记录记录位置的增量是位置的增量是位置的增量是位置的增量是dk,dk,而不是而不是而不是而不是1 1 /2.r0/2.r0只只只只是是是是暂暂暂暂存存存存单单单单元元元元,不不不不是
17、是是是哨哨哨哨兵兵兵兵。当当当当j=0j=0时时时时,插插插插入入入入位位位位置已找到置已找到置已找到置已找到 for(i=dk+1;i=L.length;+i)for(i=dk+1;i0<(L.r0.kry,L.rj.key);j-=dk)for(j=i-dk;j0<(L.r0.kry,L.rj.key);j-=dk)L.rj+dk=L.rj;L.rj+dk=L.rj;/记记记记录录录录后后后后移移移移,查查查查找找找找插插插插入入入入位置位置位置位置 L.rj+dk=L.r0;L.rj+dk=L.r0;/插入插入插入插入 /ShellInsert/ShellInsertvoid S
18、hellSort(SqList&L,int dlta,int t)/按增量序列按增量序列dlta0.t-1对对依次表依次表L作希作希尔尔排序排序 for(k=0;kt;+t)ShellInsert(L,dltak);/一一趟趟增增量量为为daltk的的插插入排序入排序/ShellSort不稳定空间代价:O(n)时间代价增量序列不合适时,O(n2)选择适当的增量序列,可以使得时间代价接近O(n)Hibbard增量序列2k-1,2k-1-1,7,3,1Hibbard增量序列的Shell排序的效率可以达到O(n3/2)呈2p3q形式的一系列整数:1,2,3,4,6,8,9,12时间代价为O(nlog
19、2n)算法分析算法分析103快速排序快速排序一、起泡排序一、起泡排序Bubble Sort算法思想:依次比较相邻的记录,假如不满足排序要求,就交换相邻记录,直到全部的记录都已经排好序检查每次冒泡过程中是否发生过交换,假如没有,则表明整个数组已经排好序了,排序结束,避开不必要的比较void BubbleSort(SqList&L)for(i=1;iL.length;i+)change=FALSE;for(j=1;jL.rj+1.key)change=TRUE;L.rjL.rj+1;if(!change)return;共共进进行行n-1趟排序,趟排序,共共进进行行n(n-1)/2次比次比较较T(n
20、)=O(n2)算法分析算法分析稳定空间代价:O(n)时间代价:比较次数最少:O(n)最多:交换次数最多为O(n2),最少为0,平均为O(n2)最坏,平均时间代价均为O(n2)最好时间代价为O(n)二、快速排序二、快速排序二、快速排序二、快速排序Quick SortQuick Sort基本思想:基本思想:通通过过一趟排序将待排序一趟排序将待排序记录记录分成独立的两部分,分成独立的两部分,其中一部分其中一部分记录记录的关的关键键字均小于另一部分字均小于另一部分记录记录 的关的关键键字,然后分字,然后分别对这别对这两部分两部分进进行行递归递归排序排序 一趟排序:一趟排序:一趟排序:一趟排序:随意随意
21、随意随意选选选选取一个取一个取一个取一个记录记录记录记录作作作作为为为为枢枢枢枢轴轴轴轴(支点)(支点)(支点)(支点)pivot,pivot,将全部关将全部关将全部关将全部关键键键键字小于它的字小于它的字小于它的字小于它的记录记录记录记录排在它的前面排在它的前面排在它的前面排在它的前面,将全部关将全部关将全部关将全部关键键键键字大于它的字大于它的字大于它的字大于它的记录记录记录记录排在它的后面。即以枢排在它的后面。即以枢排在它的后面。即以枢排在它的后面。即以枢轴记录为轴记录为轴记录为轴记录为分界分界分界分界线线线线,使原序列,使原序列,使原序列,使原序列L.rs,L.rs+1,L.rtL.r
22、s,L.rs+1,L.rt分成两个子序列:分成两个子序列:分成两个子序列:分成两个子序列:L.rs,L.rs+1,L.ri-1 L.rs,L.rs+1,L.ri-1和和和和 L.ri+1,L.ri+2,L.rt L.ri+1,L.ri+2,L.rt 枢枢枢枢轴记录轴记录轴记录轴记录在位置在位置在位置在位置i i49 38 65 97 76 13 27 49i27 38 65 97 76 13 49 4927 38 49 97 76 13 65 49jiiijjijj27 38 13 97 76 49 65 49iji27 38 13 49 76 97 65 49ij27 38 1376 97
23、65 49jj具体具体具体具体实现实现实现实现:low=s;high=t;pivotkey=L.rlow.key;low=s;high=t;pivotkey=L.rlow.key;(1)(1)从从从从highhigh起起起起先先先先往往往往前前前前找找找找第第第第一一一一个个个个关关关关键键键键字字字字小小小小于于于于pivotkeypivotkey的的的的记记记记录录录录,与枢,与枢,与枢,与枢轴记录轴记录轴记录轴记录交交交交换换换换 (2)(2)从从从从lowlow起起起起先先先先往往往往后后后后找找找找第第第第一一一一个个个个关关关关键键键键字字字字大大大大于于于于pivotkeypiv
24、otkey的的的的记记记记录录录录,与枢与枢与枢与枢轴记录轴记录轴记录轴记录交交交交换换换换(3)(3)重复(重复(重复(重复(1 1)()()()(2 2)直到)直到)直到)直到low=highlow=high为为为为止止止止此此此此时时时时枢枢枢枢轴记录轴记录轴记录轴记录所在的位置所在的位置所在的位置所在的位置i=low=highi=low=high27 38 13 49 76 97 65 4913 27 3849 65 76 97 int partition(SqList&L,int low,int high)int partition(SqList&L,int low,int high
25、)/交交交交换换换换依依依依次次次次表表表表L L中中中中的的的的子子子子表表表表L.rlow.highL.rlow.high的的的的记记记记录录录录,枢枢枢枢轴轴轴轴记记记记录录录录到位到位到位到位,并返回其所在位置并返回其所在位置并返回其所在位置并返回其所在位置/此此此此时时时时在它之前(后)的在它之前(后)的在它之前(后)的在它之前(后)的记录记录记录记录均不大(小)于它均不大(小)于它均不大(小)于它均不大(小)于它 piovtkey=L.rlow.key;piovtkey=L.rlow.key;/用用用用子子子子表表表表的的的的第第第第一一一一个个个个记记记记录录录录作作作作枢枢枢枢
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法 数据结构 算法 第十 内部 排序 分析 优秀 PPT
限制150内