




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东南大学计算机学院 方效林本课件借鉴了清华大学殷人昆老师和哈尔滨工业大学张岩老师的课件第九章 排序本章主要内容排序的概念插入排序顺序插入排序折半插入排序希尔排序快速排序选择排序归并排序分配排序内部排序算法分析2排序的概念定义将一组杂乱无章的数据按一定规律顺次排列数据表(dataList)待排序数据元素的有限集合排序码(key)通常数据元素有多个属性,作为排序依据的属性称为排序码学生成绩表,按学号小到大排序,按成绩高到低排序3排序的概念排序的稳定性两数据元素排序码相同,排序前后两元素先后顺序若相同,则是稳定的若不同,则不稳定内排序和外排序内排序所有元素都在存在内存的排序外排序数据太多,内存放不下
2、,而存放在外部存储器,排序时需要经常在内、外存之间读写数据41(a)2(b)2(c)3(d)1(a)2(c)2(b)3(d)2(c)1(a)3(d)2(b)初始排序1排序2稳定的不稳定顺序插入排序顺序插入排序算法将待排序元素,从后向前寻找适当的插入位置,直到所有元素都插入为止621254925*1608初始21254925*1608第1步21254925*1608第2步21254925*1608第3步212525*491608第4步16212525*4908第5步插入25,25 21,无需移动插入49,49 25,无需移动插入25*,25* 49,212525*491608插入16,16 49
3、,25*,25,21,16212525*49080816212525*49插入08,08 high,49,25*,25后移,23填入16212525*4923012345lowmidhigh16212525*4923012345lowmidhigh16212525*4923012345lowmidhighmid23,high=mid-1,mid=(low+high)/2mid23,low=mid+1,mid=(low+high)/216212525*4923012345lowmidhighmid23,low=mid+1,mid=(low+high)/2折半插入排序算法分析平均情况下,折半搜索比
4、顺序搜索快搜索元素i需比较log2i +1次总比较次数移动的时间复杂度O(n2)是稳定的排序算法,需额外一个存储空间10比较的时间复杂度O(n*log2n)希尔排序基本思想设定不同gap值,距离gap的元素放一起插入排序1121254925*1608初始21254925*1608第1步21254925*160821254925*1608gap= n/3+1 = 3 21160825*2549结果21160825*2549gap= gap/3+1 = 2 21160825*254908162125*2549结果08162125*254908162125*2549gap= gap/3+1 = 1
5、结果第2步第3步最后1步是n个元素进行插入排序是不是很慢?希尔排序算法分析设定不同gap值,距离gap的元素放一起插入排序gap值越来越小,由于前面的排序过程,使得大多数数据已经基本有序,因此希尔排序速度仍然很快gap的取值方法有很多种gap= gap/3+1gap= gap/2希尔排序复杂度分析很困难,还没有完整的数学分析统计得出,平均比较和移动次数在n1.25,1.6n1.25内是不稳定的排序算法12快速排序基本思想Partition:任取一元素x为基准(如选第1个),小于x的元素放在x左边,大于等于x的元素放在x右边对左、右部分递归执行上一步骤直至只有一个元素1321254925*160
6、8初始第1层第2层第3层选21为基准左部选08,右部选25*为基准左部选16,右部选25为基准081621254925*08162125*254908162125*2549第4层右部选49为基准08162125*2549快速排序Partition(low,high)初始时基准坐标p = low, x=alow=21从i=low+1位置开始判断,比x小的元素与p下一个位置交换,p自加1循环直至i high,最后alow与ap交换14pppipihigh,停止ialow与ap交换ai与ap+1交换, p+ai与ap+1交换, p+21254925*160821164925*250821160825
7、*254908162125*2549快速排序性能分析快速排序是一个递归算法1621081625*254908162125*2549递归树快速排序性能分析快速排序的趟数取决于递归树的深度若每次选取的基准可将序列划分成长度相近的左、右两部分,则下一层将对两个长度减半的序列排序设原序列有n个元素,选基准和划分所需时间为O(n)设整个快速排序所需时间为T(n),则有:T(n) cn + 2T(n/2) / c 是一个常数 cn + 2(cn/2 + 2T(n/4) = 2cn + 4T(n/4) 2cn + 4(cn/4 +2T(n/8) = 3cn + 8T(n/8) cn log2n + nT(1
8、) = O(nlog2n )1721081625*2549快速排序性能分析最坏情况单枝树,每次划分只得到比上一次少一个元素的序列比较次数递归树有n层,存储开销为O(n)快速排序是不稳定的算法1921081625*2549快速排序改进算法快速排序对长度很小的序列排序并不比直接插入快长度取525时,直接插入法比快速排序法快10%改进方法1:在快速排序递归过程中,当序列长度小于一定值时,使用直接插入排序法改进方法2:在快速排序递归过程中,当序列长度小于一定值时,退出排序得到一个整体上几乎已经排好序的序列对这个几乎已经排好序的序列使用直接插入排序法20快速排序改进算法基准元素的选取对算法性能有很大影响
9、改进方法1:可随机选择一个元素作为基准,避免最坏情况发生改进方法2:取左端点、右端点、中点(mid=(left+right)/2)这三个元素中的中间值作为基准2121254925*163508左端点右端点中点取21,25*,08三个元素中的21为基准选择排序直接选择排序在待排序序列中选择最小的元素xx与第一个元素对换剔除x,对剩下元素执行以上步骤2221254925*1608初始08254925*1621第1步08164925*2521第2步08162125*2549第3步08162125*2549第4步08162125*2549第5步选择排序直接选择排序算法分析设有n个元素,第i趟比较次数为
10、n-i-1次总比较次数为移动次数最好情况为0最坏情况为3(n-1)直接选择排序是不稳定算法23堆排序算法思想建立最大堆循环执行以下步骤,直至所有元素出堆每次堆顶元素(即最大元素)与堆中最后一个元素交换剔除最大元素后调整为最大堆49082525*1621i=221254925*1608最后一元素的父节点i=2开始调整i=121254925*1608调整i=1i=0调整i=021254925*160849082525*162149082525*1621形成最大堆49252125*160821082525*1649堆排序算法思想建立最大堆循环执行以下步骤,直至所有元素出堆每次堆顶元素(即最大元素)与
11、堆中最后一个元素交换剔除最大元素后调整为最大堆491625*252121160825*2549堆顶21与堆尾08交换虚线内调整为最大堆084925*2516082125*2549堆顶16与堆尾08交换虚线内调整为最大堆2108164925*2508162125*2549虚线内调整为最大堆211608堆排序堆排序算法分析建立最大堆设堆中有n个元素, 对应完全二叉树有k层(2k-1n2k)第i层向下调整移动距离最大为(k-i), 第i层节点数为2i-1总移动次数循环弹出堆顶元素执行n-1次向下调整,每次调整距离log2(n+1) 总调整时间O(nlog2n)堆排序算法的计算时间复杂度为O(nlog
12、2n)是不稳定排序归并排序算法分析计算时间包括对两个子序列分别排序时间归并的时间T(n) = cn+2T(n/2) = O(nlog2n)最好、最坏、平均时间复杂度均为O(nlog2n)是稳定排序29桶式排序基本思想输入:在0,1)区间内均匀分布的随机序列将区间0,1)划分成一系列桶(等长子区间),如0, 0.1), 0.1, 0.2), , 0.9, 1)对属于桶内的序列分别排序,按桶的编号依次输出300123456789.72.78.12.17.21.23.26.39.68.94.78.17.39.26.72.94.21.12.23.680123456789.78.72.17.12.26.
13、21.23.39.68.94桶式排序算法分析整个桶排序时间复杂度为将元素分配到各个桶中的时间复杂度为O(n)假设每个桶中序列使用直接插入排序,时间复杂度为O(ni2)极限情况下,每个桶放一个元素,桶排序最好效率为O(n)31基数排序多排序码排序花色: 面值:2345678910JQKA排成以下序列就是多排序码排序2, , A, 2, , A, 2, , A, 2, , A排序后的有序序列称为字典有序序列可先按花色排序,再按字母排序也可先按字母排序,再按花色排序32基数排序多排序码排序最高位优先(MSD, Most Significant Digit first)按第1排序码排序,会分成若干组递
14、归对各组按第2,3,d排序码排序最后把所有子组元素依次连接起来形成有序序列最低位优先(LSD, Least Significant Digit first)按第d排序码(最低位)排序对上一排序结果按第d-1排序码(次低位)排序对上一排序结果按第d-2排序码排序,以此类推,直到按第1排序码完成排序,可得最终排序结果33基数排序多排序码排序最高位优先(MSD, Most Significant Digit first)按第1排序码排序,会分成若干组递归对各组按第2,3,d排序码排序最后把所有子组元素依次连接起来形成有序序列34332633059589232664179457825714405361
15、179232332, 361457, 405589633,6647148250591234567890332361012435678945740512346570896336640124356789基数排序最低位优先(LSD)按第d排序码(最低位)排序对上一排序结果按第d-1排序码(次低位)排序对上一排序结果按第d-2排序码排序,以此类推,直到按第1排序码完成排序,可得最终排序结果332633589232664179457825405361012345678936133263358982517966440523245736133223263366482540545758917901234567
16、893613322326336648254054575891794058253322326334573616641795890123456789405825332232633457361664179589179232332361405457589633664825基数排序算法性能分析n:记录数,d:排序码数,r:基数时间复杂度:分配操作:O(n),收集操作O(r),需进行d趟分配和收集。时间复杂度:O(d(n+r)空间复杂度:所需辅助空间为队首和队尾指针2r个,此外还有为每个记录增加的链域空间n个。空间复杂度O(n+r)36各排序方法时间复杂度比较37排序方法平均情况最好情况最坏情况直接插入排序O(n2)O(n)O(n2)希尔排序O(nlog2n)O(n1.3)O(n2)起泡排序O(n2)O (n)O(n2)快速排序O(nlog2n)O(nlog2n)O(n2)直接选择排序O(n2)O(n2)O(n2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高校退休管理岗招聘考试重点题
- 2025年机关财务招聘面试模拟试卷
- 2025年无机化工生产工考试重点题及答案集解析集集解析集
- 2025年社会福利会计能力题集
- 课件APP介绍教学课件
- 2025年宠物销售代表面试题及答案
- 2025年风险管理师职业素质评估试题及答案解析
- 2025年快递企业安全实务题及答案
- 2025年志愿服务基金会笔试模拟考试试卷
- 机电专业班长培训知识课件
- 2025年稳定币在大宗商品跨境贸易中的应用研究报告
- 医院财务人员专业能力提升培训
- PDCA循环在医院应急管理中的应用
- 2026创新设计高考总复习生物(人教版)-限时强化练答案解析
- 2025年人资部长面试题及答案
- 《语文八下第三单元复习课》课件
- 二手车鉴定评估的报告书
- 教学课件 金属学与热处理-崔忠圻
- 多智能体系统教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案全书教案课件合集
- 艺术欣赏完整版课件全套ppt教程(最新)
- 北师大版五年级数学上册全册教案含反思
评论
0/150
提交评论