数据结构第7章.pptx
《数据结构第7章.pptx》由会员分享,可在线阅读,更多相关《数据结构第7章.pptx(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、17.1 排序术语及记号术语术语 记录记录记录记录结点结点结点结点 文件文件文件文件线性表线性表线性表线性表 关键码:关键码:关键码:关键码:能够唯一确定结点的一个或若干域。能够唯一确定结点的一个或若干域。能够唯一确定结点的一个或若干域。能够唯一确定结点的一个或若干域。排序码:排序码:排序码:排序码:作为排序运算依据的一个或若干域。作为排序运算依据的一个或若干域。作为排序运算依据的一个或若干域。作为排序运算依据的一个或若干域。组合排序码,组合排序码,组合排序码,组合排序码,(主关键码,次关键码主关键码,次关键码主关键码,次关键码主关键码,次关键码)例,例,例,例,(总分数,数据结构分数,计算引
2、论分数总分数,数据结构分数,计算引论分数总分数,数据结构分数,计算引论分数总分数,数据结构分数,计算引论分数)排序:排序:排序:排序:将一组杂乱无章的数据按一定的规律排列起来将序列中的记录。将一组杂乱无章的数据按一定的规律排列起来将序列中的记录。将一组杂乱无章的数据按一定的规律排列起来将序列中的记录。将一组杂乱无章的数据按一定的规律排列起来将序列中的记录。第1页/共80页2术语排序问题排序问题排序问题排序问题 给定一组记录序列给定一组记录序列给定一组记录序列给定一组记录序列R=rR=rR=rR=r1 1 1 1,r,r,r,r2 2 2 2,.r.r.r.rn n n n,其排序码分别为其排序
3、码分别为其排序码分别为其排序码分别为K=K=K=K=k k k k1 1 1 1,k,k,k,k2 2 2 2,,k k k kn n n n 将这些记录排成顺序为将这些记录排成顺序为将这些记录排成顺序为将这些记录排成顺序为R R R R=r r r rs1s1s1s1,r,r,r,rs2s2s2s2,,r r r rsn sn sn sn 的一个序列的一个序列的一个序列的一个序列S S S S,其排序码序列其排序码序列其排序码序列其排序码序列K K K K=k k k ks1s1s1s1,k k k ks2s2s2s2,k k k ksn sn sn sn 是一个满足某种关系的有序序列是一个
4、满足某种关系的有序序列是一个满足某种关系的有序序列是一个满足某种关系的有序序列。关系是任意的,如通常经常使用的小于、大于等关系或任意的关系。第2页/共80页3术语 内排序内排序内排序内排序全部记录都可以同时调入内存进行的排序。全部记录都可以同时调入内存进行的排序。全部记录都可以同时调入内存进行的排序。全部记录都可以同时调入内存进行的排序。外排序外排序外排序外排序排序过程还要访问外存排序过程还要访问外存排序过程还要访问外存排序过程还要访问外存(因为待排记录的因为待排记录的因为待排记录的因为待排记录的数量太大,内存容纳不下数量太大,内存容纳不下数量太大,内存容纳不下数量太大,内存容纳不下)排序算法
5、的稳定排序算法的稳定排序算法的稳定排序算法的稳定&不稳定不稳定不稳定不稳定 如果在对象序列中有两个对象如果在对象序列中有两个对象如果在对象序列中有两个对象如果在对象序列中有两个对象riririri和和和和rjrjrjrj,它们的关键码它们的关键码它们的关键码它们的关键码 ki=kjki=kjki=kjki=kj,且在排序之前,对象且在排序之前,对象且在排序之前,对象且在排序之前,对象riririri排在排在排在排在rjrjrjrj前面。前面。前面。前面。如果在排序之后,对象如果在排序之后,对象如果在排序之后,对象如果在排序之后,对象riririri仍在对象仍在对象仍在对象仍在对象rjrjrjr
6、j的前面,则称这的前面,则称这的前面,则称这的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。个排序方法是稳定的,否则称这个排序方法是不稳定的。个排序方法是稳定的,否则称这个排序方法是不稳定的。个排序方法是稳定的,否则称这个排序方法是不稳定的。第3页/共80页4基本操作按排序依据原则按排序依据原则按排序依据原则按排序依据原则插入排序:直接插入排序、折半插入排序、插入排序:直接插入排序、折半插入排序、插入排序:直接插入排序、折半插入排序、插入排序:直接插入排序、折半插入排序、希尔(希尔(希尔(希尔(shellshellshellshell)排序)排序)排序)排序交换排序:冒泡排序、
7、快速排序交换排序:冒泡排序、快速排序交换排序:冒泡排序、快速排序交换排序:冒泡排序、快速排序选择排序:简单选择排序、堆排序选择排序:简单选择排序、堆排序选择排序:简单选择排序、堆排序选择排序:简单选择排序、堆排序归并排序:归并排序:归并排序:归并排序:2-2-2-2-路归并排序路归并排序路归并排序路归并排序基数排序基数排序基数排序基数排序第4页/共80页57.2 三种代价为O(n2)的排序方法 7.2.1 7.2.1 7.2.1 7.2.1 插入排序插入排序插入排序插入排序 7.2.7.2.7.2.7.2.2 2 2 2 冒泡冒泡冒泡冒泡排序排序排序排序 7.2.7.2.7.2.7.2.3 3
8、 3 3 选择选择选择选择排序排序排序排序第5页/共80页67.2.1 7.2.1 插入排序插入排序算法思想:逐个处理待排序的记录,每个记录都要与前面那些已排好序的记录进行比较,然后插入到适当的位置。第6页/共80页77.2.1 教材上插入排序算法template template template template void inssort(Elem A,int n)void inssort(Elem A,int n)void inssort(Elem A,int n)void inssort(Elem A,int n)for(int i=1;in;i+)for(int i=1;in;i+)
9、for(int i=1;in;i+)for(int i=1;i0)&for(int j=i;(j0)&for(int j=i;(j0)&for(int j=i;(j0)&(Comp:lt(Aj,Aj-1);j-)(Comp:lt(Aj,Aj-1);j-)(Comp:lt(Aj,Aj-1);j-)(Comp:lt(Aj,Aj-1);j-)swap(A,j,j-1);swap(A,j,j-1);swap(A,j,j-1);swap(A,j,j-1);算法分析:算法分析:算法分析:算法分析:稳定稳定稳定稳定 空间代价:空间代价:空间代价:空间代价:(1)(1)(1)(1)时间代价:时间代价:时间代价
10、:时间代价:最佳情况:最佳情况:最佳情况:最佳情况:n-1n-1n-1n-1次次次次比较比较比较比较,0 0 0 0次次次次交换交换交换交换,(n)(n)(n)(n)最差情况:比较次数为最差情况:比较次数为最差情况:比较次数为最差情况:比较次数为i=n(n-1)/2=i=n(n-1)/2=i=n(n-1)/2=i=n(n-1)/2=(n(n(n(n2 2 2 2)交换次数为交换次数为交换次数为交换次数为 3i=3n(n-1)/2=3i=3n(n-1)/2=3i=3n(n-1)/2=3i=3n(n-1)/2=(n(n(n(n2 2 2 2)(一次(一次(一次(一次swapswapswapswap
11、需需需需要交换要交换要交换要交换3 3 3 3次)次)次)次)平均情况:平均情况:平均情况:平均情况:(n(n(n(n2 2 2 2)i=1n-1i=1n-1第7页/共80页8改进的插入排序算法template template template template void inssort(Elem A,int n)void inssort(Elem A,int n)void inssort(Elem A,int n)void inssort(Elem A,int n)for(int i=1;in;i+)for(int i=1;in;i+)for(int i=1;in;i+)for(int i
12、=1;i=0&(Comp:lt(while(j=0&(Comp:lt(while(j=0&(Comp:lt(while(j=0&(Comp:lt(temptemptemptemp,Aj),Aj),Aj),Aj)Aj+1=Aj;j-;Aj+1=Aj;j-;Aj+1=Aj;j-;Aj+1=Aj;j-;/将将将将=Ai=Ai=Ai=Ai的记录后移的记录后移的记录后移的记录后移 Aj+1=temp;Aj+1=temp;Aj+1=temp;Aj+1=temp;/Aj+1/Aj+1/Aj+1/Aj+1是记录是记录是记录是记录AiAiAiAi的正确位置的正确位置的正确位置的正确位置 第8页/共80页9改进插
13、入排序算法分析 算法分析:算法分析:算法分析:算法分析:稳定稳定稳定稳定 空间代价:空间代价:空间代价:空间代价:(1)(1)(1)(1)时间代价:时间代价:时间代价:时间代价:最佳情况:最佳情况:最佳情况:最佳情况:n-1n-1n-1n-1次比较,次比较,次比较,次比较,n n n n次交换,次交换,次交换,次交换,(n)(n)(n)(n)最差情况:比较次数为最差情况:比较次数为最差情况:比较次数为最差情况:比较次数为(n(n(n(n2 2 2 2)(同前)(同前)(同前)(同前)交换次数为交换次数为交换次数为交换次数为 i=n(n-1)/2=i=n(n-1)/2=i=n(n-1)/2=i=
14、n(n-1)/2=(n(n(n(n2 2 2 2)平均情况:平均情况:平均情况:平均情况:(n(n(n(n2 2 2 2)i=1n-1第9页/共80页10加入监视哨的插入排序算法template template template template void inssort(Elem A,int n)void inssort(Elem A,int n)void inssort(Elem A,int n)void inssort(Elem A,int n)for(int i=2;i=n;i+)for(int i=2;i=n;i+)for(int i=2;i=n;i+)for(int i=2;i=
15、n;i+)A0=Ai;A0=Ai;A0=Ai;A0=Ai;/数组有效存储从数组有效存储从数组有效存储从数组有效存储从A1A1A1A1开始开始开始开始 j=i-1;j=i-1;j=i-1;j=i-1;while(Comp:lt(A0,Aj)while(Comp:lt(A0,Aj)while(Comp:lt(A0,Aj)while(Comp:lt(A0,Aj)Aj+1=Aj;j-;Aj+1=Aj;j-;Aj+1=Aj;j-;Aj+1=Aj;j-;Aj+1=A0;Aj+1=A0;Aj+1=A0;Aj+1=A0;第10页/共80页11利用二分法的插入排序思想:在插入第i个记录时,前面的记录已经有序。故
16、可以用二分法查找第i个记录的正确位置。第11页/共80页127.2.2 起泡排序算法思想:若序列中有n 个元素,通常进行n-1 趟。第1 趟,针对第Vector0 至Vectorn-1个元素进行。第2 趟,针对第Vector1至Vectorn-1 个元素进行第n-1 趟,针对第Vectorn-2至Vectorn-1 个元素进行。每一趟进行的过程:从第一个元素开始,比较两个相邻的元素。若相邻的元素的相对位置不正确,则进行交换;否则继续比较下面两个相邻的元素。第12页/共80页137.2.2 起泡排序不停地比较相邻的记录,如果不满足排序要求,就交换相邻记录,直到所有的记录都已经排好序。第13页/共
17、80页14教材上起泡排序算法template template template template void bubsort(Elem A,int n)void bubsort(Elem A,int n)void bubsort(Elem A,int n)void bubsort(Elem A,int n)for(int i=0;for(int i=0;for(int i=0;for(int i=0;in-1in-1in-1ii;j-)for(int j=n-1;ji;j-)for(int j=n-1;ji;j-)for(int j=n-1;ji;j-)if(Comp:lt(Aj,Aj-1)i
18、f(Comp:lt(Aj,Aj-1)if(Comp:lt(Aj,Aj-1)if(Comp:lt(Aj,Aj-1)swap(A,j,j-1);swap(A,j,j-1);swap(A,j,j-1);swap(A,j,j-1);第14页/共80页15起泡排序算法分析 稳定 空间代价:(1)(此章我们仅分析排序所需额外空间开销)时间代价:比较次数:最佳、最差i=n(n-1)/2=(n2)交换次数最多为(n2),最少为0,平均为(n2)。最大,最小,平均时间代价均为(n2)。1i=n-1第15页/共80页16优化的起泡算法改进:检查每次起泡过程中是否发生过交换,如果没有,则表明整个数组已经排好序,排序
19、结束。避免不必要的比较。第16页/共80页17改进的起泡排序算法template template template template void bubsort(Elem A,int n)void bubsort(Elem A,int n)void bubsort(Elem A,int n)void bubsort(Elem A,int n)int int int int flagflagflagflag;for(int i=0;in-1;i+)for(int i=0;in-1;i+)for(int i=0;in-1;i+)for(int i=0;ii;j-)for(int j=n-1;ji;
20、j-)for(int j=n-1;ji;j-)for(int j=n-1;ji;j-)if(Comp:lt(Aj,Aj-1)if(Comp:lt(Aj,Aj-1)if(Comp:lt(Aj,Aj-1)if(Comp:lt(Aj,Aj-1)swap(A,j,j-1);swap(A,j,j-1);swap(A,j,j-1);swap(A,j,j-1);flag=TRUEflag=TRUEflag=TRUEflag=TRUE;if(if(if(if(flag=FALSEflag=FALSEflag=FALSEflag=FALSE)return;)return;)return;)return;第17页
21、/共80页18优化起泡排序算法分析 算法分析:算法分析:算法分析:算法分析:稳定稳定稳定稳定 时间代价:时间代价:时间代价:时间代价:最佳情况:最佳情况:最佳情况:最佳情况:n-1n-1n-1n-1次比较,次比较,次比较,次比较,0 0 0 0次交换,次交换,次交换,次交换,(n)(n)(n)(n)最差情况:比较和交换次数均为最差情况:比较和交换次数均为最差情况:比较和交换次数均为最差情况:比较和交换次数均为(n(n(n(n2 2 2 2)平均情况:平均情况:平均情况:平均情况:(n(n(n(n2 2 2 2)第18页/共80页197.2.3 直接选择排序算法思想:找出剩下的未排序记录中的最小
22、记录,然后直接与数组中第i个记录交换,比起泡排序减少了移动次数。第19页/共80页20直接选择排序算法template template template template void selsort(Elem A,int n)void selsort(Elem A,int n)void selsort(Elem A,int n)void selsort(Elem A,int n)for(int i=0;in-1;i+)for(int i=0;in-1;i+)for(int i=0;in-1;i+)for(int i=0;ii;j-)for(int j=n-1;ji;j-)for(int j=n
23、-1;ji;j-)for(int j=n-1;ji;j-)/Find least/Find least/Find least/Find least if(Comp:lt(Aj,Alowindex)if(Comp:lt(Aj,Alowindex)if(Comp:lt(Aj,Alowindex)if(Comp:lt(Aj,Alowindex)lowindex=jlowindex=jlowindex=jlowindex=j;/Put it in place/Put it in place/Put it in place/Put it in place swap(A,i,swap(A,i,swap(A
24、,i,swap(A,i,lowindexlowindexlowindexlowindex););););第20页/共80页21算法分析 不 稳定 空间代价:(1)时间代价:比较次数:最好、最坏情况均为(n-i-1)=n*(n-1)/2,即(n2)交换次数:最好(自身交换)、最坏3(n-1)(一次swap需要交换3次),故(n)总时间代价:(n2)。i=0n-2第21页/共80页22交换指针,减少交换记录的次数第22页/共80页23小结:时间代价第23页/共80页24小结:时间代价(2)时间复杂度为(n2)的原因:一个长度为n序列平均有n(n-1)/4对逆置任何一种只对相邻记录进行比较的排序算法
25、的平均时间代价都是(n2)第24页/共80页257.3 Shell 排序(希尔排序)直接插入排序的两个性质:在最好情况(序列本身已是有序的)下时间代价为(n)对于短序列,直接插入排序比较有效 Shell排序有效地利用了直接插入排序的这两个性质第25页/共80页26Shell 排序算法思想:先将序列转化为若干小序列,在这些小序列内进行插入排序逐渐扩大小序列的规模,而减少小序列个数,使得待排序序列逐渐处于更有序的状态最后对整个序列进行扫尾直接插入排序,从而完成排序第26页/共80页27Shell 排序 又名:缩小增量排序法又名:缩小增量排序法又名:缩小增量排序法又名:缩小增量排序法(不稳定算法,时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构
限制150内