- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.交换排序与归并排序.ppt
小结 掌握直接插入排序、直接选择排序、快速排序、归并排序的思想。 可以写出任何一组序列的上述四种排序算法的排序过程。快速排序重点掌握一次划分过程。 掌握四种排序的实现过程(程序)。 练习:已知排序码{60,50,80,10,30,70},要求由小到大排序,请分别写出直接插入排序、直接选择排序、归并排序的的排序过程,以及快速排序一次划分的结果。 fangliu * 是通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。 * * * * 排 序 交换排序 归并排序 各种内部排序算法的讨论 交换排序 基本思想:对待排序数据元素,两两比较其关键字,若发现存在逆序(两个关键字按非递增次序排列),则交换这两个数据元素,一直到待排序数据元素序列中没有逆序为止。 常用的交换排序方法有冒泡排序和快速排序。 冒泡排序 基本思想: 每趟不断将记录两两比较,若发现逆序,则交换两个记录,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元,排序码最小的记录有如气泡一般逐渐向上漂浮至水面。 优点: 每趟结束时,不仅能挤出一个最小值到最前面位置,还能同时部分理顺其他元素(各元素不断接近自己的位置);一旦下趟没有交换发生,还可以提前结束排序。 冒泡排序 假设数据元素存放于数组L中。初始时,有序区为空,无序区为L[0]~L[n-1]。在无序区中,每次均从后向前依次比较相邻的两个数据元素L[j]与L[j-1],若存在逆序(即L[j]L[j-1]),则交换二者的位置。每执行这一个过程称为一趟冒泡排序。结果关键字最小的记录被安置在最前一个记录上。 对后n-1个记录进行第二趟冒泡排序,结果使关键字次小的记录被安置在第2个记录位置 重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止 冒泡排序flash演示 void BubbleSort(DataType L[],int len) { int i,j,exchange; //exchange为是否发生交换的标志 DataType tmp; for(i=0; in-1; i++) //最多n-1趟排序 { exchange=0; for(j=n-1; ji; j--) //一趟冒泡排序 if(L[j].keyL[j-1].key) //逆序则交换 { tmp=L[j]; L[j]=L[j-1]; L[j-1]=tmp; exchange=1; //发生了交换,不能结束排序 } if(exchange==0) break; //如果不再发生交换则排序结束 } } (1)时间复杂性分析: 待排序列为正序: 比较次数n-1,交换次数0; 待排序列为逆序: 比较次数n(n-1)/2,交换次数n(n-1)/2; 故总的时间复杂度为O(n2), 由于其中的元素移动较多,所以属于内排序中速度较慢的一种。 (2)空间复杂度分析 s(n)=O(1) (3)算法的稳定性: 因为冒泡排序算法只进行元素间的顺序移动,所以是一个稳定的算法。 冒泡排序算法评价 快速排序 算法思想 通过一趟排序选定一个关键字介于“中间”的记录,从而使剩余记录可以分成两个子序列分别继续排序,通常称该记录为“枢轴”。 例如:序列{ 68, 39, 65, 83, 74, 32, 47, 56 },经过一次快速排序后根据第一个元素“68”可划分为{ 56, 39, 65, 47, 32, 68, 74, 83 },此时, “68”被称为“枢轴”。 实际应用中枢轴元素的选定有多种方法,而选定第一个元素作为枢轴只是其中之一。 基本思想:设数据元素存放于数组R中,当前序列为 R[start]~R [end],star和end分别为序列的上、下界。 一次划分:选序列的第一个元素R [start](称为枢轴) 作为基准元素x。设置变量low和high,初始时分别指向序列的两端s和e。low和high依次从序列的两端交替向序列中央扫描,将小于x的元素移到枢轴的左边,将大于等于x的元素均移到枢轴的右边,这样经过一趟快速排序之后,序列就被基准元素x划分为左、右两个子序列R [start]~R [low-1]和R [high+1]~R [end],并且左端子序列中所有数据元素均小于枢轴,右边的子序列中所有数据元素均大于等于枢轴。 重复以上划分过程,直至序列被划分为只含有1个数据元素的子序列为止,此时整个序列有序。
您可能关注的文档
- ..立体图形与平面图形.ppt
- ..蒙旭虚拟算法与TNl类问题.ppt
- ..计算机第三章计算机软件.ppt
- ..防火墙简介.ppt
- ..随机变量分布函数的定义.ppt
- ..集合的基本运算.ppt
- ..集合运算.ppt
- ..频率分布表.ppt
- ..高新技术企业认定培训合肥和钧正策信息技术有限公司.ppt
- ..黄金分割.ppt
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
文档评论(0)