Chap8_算法与数据结构—C语言描述(第2版)张乃孝编课件

上传人:ning****hua 文档编号:243030489 上传时间:2024-09-14 格式:PPT 页数:38 大小:871KB
返回 下载 相关 举报
Chap8_算法与数据结构—C语言描述(第2版)张乃孝编课件_第1页
第1页 / 共38页
Chap8_算法与数据结构—C语言描述(第2版)张乃孝编课件_第2页
第2页 / 共38页
Chap8_算法与数据结构—C语言描述(第2版)张乃孝编课件_第3页
第3页 / 共38页
点击查看更多>>
资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第八章 排序,排序定义将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫排序,。,排序分类,按待排序记录所在位置,内排序:待排序记录存放在内存,外排序:排序过程中需对外存进行访问的排序,按排序依据原则,插入排序:直接插入排序、,二分法,插入排序、希尔排序,选择排序:直接选择排序、堆排序,交换排序:冒泡排序、快速排序,归并排序:2-路归并排序,分配,排序,:,基数排序,8.,1,基本概念,排序基本操作,比较两个关键字大小,将记录从一个位置移动到另一个位置,稳定排序与非稳定排序,评价排序算法代价的标准,执行算法所需的时间;比较次数、移动次数,执行算法所需要的附加空间;,算法本身的复杂程度,在待排序的文件中,如果存在多个排序码相同的记录,经过排序后,相同排序码记录的相对次序如果保持不变,则称这种排序方法是稳定的,否则是不稳定的。,8.,2,插入排序,直接插入排序,排序过程:整个排序过程为n-1,趟插入,即先将序列中第,1,个记录看成是一个有序子序列,然后从第,2,个记录开始,逐个进行插入,直至整个序列有序,算法描述,void insertSort(SortObject * pvector),例,49 38 65 97 76 13 27,49,i=,1,38,(38 49) 65 97 76 13 27,49,i=,2,65,(38 49 65) 97 76 13 27,49,i=,3,97,(38 49 65 97) 76 13 27,49,i=,4,76,(38 49 65 76 97) 13 27,49,i=,5,13,(13 38 49 65 76 97) 27,49,( ),i=,6,(13 38 49 65 76 97) 27,49,27,j,j,j,j,j,j,97,),76,65,49,38,27,(13 27 38 49 65 76 97),排序结果:,i=,7,49,(13 38 49,49,65 76 97) 27,算法评价,时间复杂度,若待排序记录按关键字从小到大排列(正序),关键字比较次数:,C,min,=n-1,n,记录移动次数:,M,min,=n-1,n,若待排序记录按关键字从大到小排列(逆序),关键字比较次数:,C,min,=n(,n-1)/2,记录移动次数:,M,min,=,n,/2,若待排序记录是随机的,取平均值,关键字比较次数:,记录移动次数:,T(n)=O(n),空间复杂度:,S(n)=O(1),二分法,插入排序,排序过程:用折半查找方法确定插入位置,例,i=1 (30) 13 70 85 39 42 6 20,i=2,13,(13 30) 70 85 39 42 6 20,i=7,6,(6 13 30 39 42 70 85 ) 20,.,i=8,20,(6 13 30 39 42 70 85 ) 20,s,j,m,i=8,20,(6 13 30 39 42 70 85 ) 20,s,j,m,i=8,20,(6 13 30 39 42 70 85 ) 20,s,j,m,i=8,20,(6 13 30 39 42 70 85 ) 20,s,j,i=8,20,(6 13 20 30 39 42 70 85 ),算法描述,程序实现,算法评价,时间复杂度:T(n)=O(n),空间复杂度:,S(n)=O(1),算法中增加了一个辅助空间temp,希尔排序(缩小增量法),排序过程:先取一个正整数d1n,,把所有相隔,d1,的记录放一组,组内进行直接插入排序;然后取,d2r2.key,,则交换;然后比较第二个记录与第三个记录;依次类推,直至第,n-1,个记录和第,n,个记录比较为止,第一趟冒泡排序,,结果关键字最大的记录被安置在最后一个记录上,对前,n-1,个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第,n-1,个记录位置,重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止,例,49 38 65 97 76 13 27 30,初始关键字,38 49 65 76 13 27 30,97,第一趟,38 49 65 13 27 30,76,第二趟,38 49 13 27 30,65,第三趟,38 13 27 30,49,第四趟,13 27 30,38,第五趟,13 27,30,第六趟,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,算法描述,算法评价,时间复杂度,最好情况(正序),比较次数:n-1,移动次数:,0,最坏情况(逆序),比较次数:,(n-1)+(n-2)+2+1=(n*n-n)/2,移动,次数:,3*,(n-1)+(n-2)+2+1=3(n*n-n)/2,空间复杂度:,S(n)=O(1),T(n)=O(n),快速排序,基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序,排序过程:对rst,中记录进行一趟快速排序,附设两个指针,i,和,j,,设枢轴记录,r,p,=rs,x=r,p,.key,初始时令i=s,j=t,首先从,j,所指位置向前搜索第一个关键字小于,x,的记录,并和,rp,交换,再从,i,所指位置起向后搜索,找到第一个关键字大于,x,的记录,和,rp,交换,重复上述两步,直至,i=j,为止,再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止,例,初始关键字:,49,38 65 97 76 13 27 50,i,j,x,j,i,完成一趟排序:,( 27 38 13),49,(76 97 65 50),分别进行快速排序:,( 13),27 (,38),49,(50 65),76,(97),快速排序结束:,13,27,38,49,50,65,76,97,49,27,i,j,i,j,i,j,49,65,j,i,13,49,i,j,49,97,i,j,算法描述,算法评价,时间复杂度,最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n),最坏情况(每次总是选到最小或最大元素作枢轴),T(n)=O(n),空间复杂度:需栈空间以实现递归,最坏情况:S(n)=O(n),一般情况:,S(n)=O(log2n),T(n)=O(n),8.5,基数排序,多关键字排序,定义:,例 对,52,张扑克牌按以下次序排序:,23A,2,3,A,2,3,A23A,两个关键字:花色(,),面值(,23A,),并且“花色”地位高于“面值”,多关键字排序方法,最高位优先法(MSD):,先对最高位关键字,k1(,如花色)排序,将序列分成若干子序列,每个子序列有相同的,k1,值;然后让每个子序列对次关键字,k2(,如面值)排序,又分成若干更小的子序列;依次重复,直至就每个子序列对最低位关键字,kd,排序;最后将所有子序列依次连接在一起成为一个有序序列,最低位优先法(LSD):从最低位关键字kd,起进行排序,然后再对高一位的关键字排序,,依次重复,直至对最高位关键字,k1,排序后,便成为一个有序序列,MSD,与,LSD,不同特点,按,MSD,排序,必须将序列逐层分割成若干子序列,然后对各子序列分别排序,按,LSD,排序,不必分成子序列,对每个关键字都是整个序列参加排序;并且可不通过关键字比较,而通过若干次分配与收集实现排序,链式基数排序,基数排序:借助“分配”和“收集”对单逻辑关键字进行排序的一种方法,链式基数排序:用链表作存储结构的基数排序,链式基数排序步骤,设置10个队列,fi,和,ei,分别为第,i,个队列的头指针和尾指针,第一趟分配对最低位关键字(个位)进行,改变记录的指针值,将链表中记录分配至,10,个链队列中,每个队列记录的关键字的个位相同,第一趟收集是改变所有非空队列的队尾记录的指针域,令其指向下一个非空队列的队头记录,重新将,10,个队列链成一个链表,重复上述两步,进行第二趟、第三趟分配和收集,分别对十位、百位进行,最后得到一个有序序列,例,初始状态:,278,109,063,930,589,184,505,269,008,083,109,589,269,278,063,930,083,184,505,008,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,一趟分配,930,063,083,184,505,278,008,109,589,269,一趟收集:,505,008,109,930,063,269,278,083,184,589,二趟收集:,083,184,589,063,505,269,930,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,二趟分配,008,109,278,930,063,083,184,505,278,008,109,589,269,一趟收集:,008,063,083,109,184,269,278,505,589,930,三趟收集:,109,008,184,930,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,三趟分配,063,083,269,278,505,589,505,008,109,930,063,269,278,083,184,589,二趟收集:,算法描述,算法评价,时间复杂度:,分配:T(n)=O(n),收集:,T(n)=O(rd),T(n)=O(d(n+r),其中:,n,记录数,d,关键字位数,r,关键字每位的取值范围,空间复杂度:,S(n)= O( n+r),r,个队列指针,+,n,个指针域空间,8.,6,归并排序,归并将两个或两个以上的有序表组合成一个新的有序表,叫归并,2-路归并排序,排序过程,设初始序列含有n,个记录,则可看成,n,个有序的子序列,每个子序列长度为,1,两两合并,得到,n/2,个长度为,2,或,1,的有序子序列,再两两合并,,如此重复,直至得到一个长度为,n,的有序序列为止,例,初始关键字:,49 38 65 97 76 13 27,一趟归并后:,38 49 65 97 13 76 27,二趟归并后:,38 49 65 97 13 27 76,三趟归并后:,13 27 38 49 65 76 97,算法描述,算法评价,时间复杂度:T(n)=O(nlogn),空间复杂度:,S(n)=O(n),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!