C语言常见排序算法PPT学习课件.ppt
《C语言常见排序算法PPT学习课件.ppt》由会员分享,可在线阅读,更多相关《C语言常见排序算法PPT学习课件.ppt(41页珍藏版)》请在咨信网上搜索。
上章回顾上章回顾二叉树的定义树深度的定义什么样的二叉树是满二叉树中序遍历的规则2024/11/2 周六常见排序算法常见排序算法常见排序算法常见排序算法第六章第六章第六章第六章2024/11/2 周六预习检查预习检查2024/11/2 周六课程目标课程目标本章概述本章概述几种常见排序算法。几种常见排序算法。本章目标本章目标熟悉常见的查找算法和排序算法熟悉常见的查找算法和排序算法难点难点快速排序算法快速排序算法 2024/11/2 周六本章结构本章结构数据结构与算法初步数据结构与算法初步常见的排序算法2024/11/2 周六6.1 常见的排序算法常见的排序算法 冒泡排序 快速排序直接插入排序 希尔排序 选择排序 堆排序归并排序 2024/11/2 周六6.1.1 冒泡排序冒泡排序算法描述设待排序记录序列中的记录个数为n一般地,第i趟起泡排序从1到n-i+1依次比较相邻两个记录的关键字,如果发生逆序,则交换之其结果是这n-i+1个记录中,关键字最大的记录被交换到第n-i+1的位置上,最多作n-1趟。2024/11/2 周六6.1.1 冒泡排序冒泡排序算法实例2121252525*25*161608080 1 2 3 4 5212125*25*4949252516164949changchang=1=1080825*25*changchang=1=108081616changchang=1=125*25*252521214949212125251616080849492024/11/2 周六6.1.1 冒泡排序冒泡排序算法实例25*25*0 1 2 3 4 5i=4=449491616changchang=1=108082525212125*25*i=5=549491616changchang=0=00808252521212024/11/2 周六6.1.1 冒泡排序冒泡排序算法实例2 21 10 08 82 25 5 4 49 9 2 25 5 1 16 62 21 14 49 92 25 5 2 25 5 1 16 6 0 08 82 21 14 49 92 25 52 25 51 16 6 0 08 82 21 14 49 92 25 5 2 25 51 16 6 0 08 82 21 14 49 92 25 5 2 25 51 16 6 0 08 82 21 14 49 92 25 5 2 25 51 16 60 08 8初始关键字第一趟排序第四趟排序第二趟排序第三趟排序第五趟排序2024/11/2 周六6.1.1 冒泡排序冒泡排序算法实现输入n 个数给a1 到 anfor j=1 to n-1for i=1 to n-jaiai+1真假aiai+1输出a1 到 an#include main()int a11,i,j,t;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,&ai);printf(n);for(j=1;j=9;j+)for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);2024/11/2 周六6.1.2 快速排序快速排序 算法特点:快速排序是通过比较关键码、交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分一部分所有记录的关键码大于等于支点记录的关键码另一部分所有记录的关键码小于支点记录的关键码 2024/11/2 周六6.1.2 快速排序快速排序 算法描述:任取待排序记录序列中的某个记录(例如取第一个记录)作为基准(枢),按照该记录的关键字大小,将整个记录序列划分为左右两个子序列左侧子序列中所有记录的关键字都小于或等于基准记录的关键字 右侧子序列中所有记录的关键字都大于基准记录的关键字基准记录则排在这两个子序列中间(这也是该记录最终应安放的位置)。然后分别对这两个子序列重复施行上述方法,直到所有的记录都排在相应位置上为止。基准记录也称为枢轴(或支点)记录。取序列第一个记录为枢轴记录,其关键字为Pivotkey指针low指向序列第一个记录位置指针high指向序列最后一个记录位置2024/11/2 周六6.1.2 快速排序快速排序 算法实例:212108082525494925*25*1616始关键字始关键字08082525494925*25*1616212108082525494925*25*161608082525494925*25*161608082525494925*25*161608082525494925*25*16162121pivotkey一次交换一次交换二次交换二次交换三次交换三次交换high-1完成一趟排序完成一趟排序lowhighlowlowlowlowlowhighhighhighhighhigh2024/11/2 周六6.1.2 快速排序快速排序 算法实例:152525494925*25*1616212108082525494925*25*161621210808完成一趟排序完成一趟排序分别进行快速排序分别进行快速排序有序序列有序序列08082525494925*25*161621212024/11/2 周六6.1.2 快速排序快速排序 算法分析:快速排序是一个递归过程;利用序列第一个记录作为基准,将整个序列划分为左右两个子序列。只要是关键字小于基准记录关键字的记录都移到序列左侧;快速排序的趟数取决于递归树的高度。如果每次划分对一个记录定位后,该记录的左侧子序列与右侧子序列的长度相同,则下一步将是对两个长度减半的子序列进行排序,这是最理想的情况 162024/11/2 周六6.1.3 直接插入排序直接插入排序 算法描述:记录存放在数组R0.n-1中,排序过程的某一中间时刻,R被划分成两个子区间R0i-1和Ri.n-1,其中:前一个子区间是已排好序的有序区;后一个子区间则是当前未排序的部分。基本操作将当前无序区的第1个记录Ri插入到有序区R0.i-1中适当的位置,使R0i变为新的有序区 2024/11/2 周六6.1.3 直接插入排序直接插入排序 操作细节:当插入第当插入第i(i1)i(i1)个对象时个对象时,前面的前面的r0,r1,r0,r1,ri-1,ri-1已经排已经排好序。好序。用用riri的关键字与的关键字与ri-1,ri-2,ri-1,ri-2,的关键字顺序进行比较的关键字顺序进行比较(和顺和顺序查找类似序查找类似),如果小于,则将,如果小于,则将rxrx向后移动向后移动(插入位置后的记录向插入位置后的记录向后顺移后顺移)找到插入位置即将找到插入位置即将riri插入插入2024/11/2 周六6.1.3 直接插入排序直接插入排序 实用例子:已知待序的一组记录的初始排列为:已知待序的一组记录的初始排列为:21,25,49,2521,25,49,25*,16,08,16,0821212525494925*25*161608080 1 2 3 4 52024/11/2 周六6.1.3 直接插入排序直接插入排序 实用例子:0 1 2 3 4 5 temp212125494925*25*161608082525i=10 1 2 3 4 5 temp212125254925*25*161608084949i=221212525494925*161608080 1 2 3 4 5i=325*25*2024/11/2 周六6.1.3 直接插入排序直接插入排序 实用例子:0 1 2 3 4 5 temp21212525494925*25*160808i=416160 1 2 3 4 5 temp21212525494925*25*161608i=5080821212525494925*25*161608080 1 2 3 4 5完成2024/11/2 周六6.1.3 直接插入排序直接插入排序 算法实现:void InsertSort(int r,int n)/假设关键字为整型,放在向量假设关键字为整型,放在向量r中中 int i,j,temp;for(i=1;i0;j-)/从后向前顺序比较,并依次后移从后向前顺序比较,并依次后移 if(temp rj-1)rj=rj-1;else break;rj=temp;2024/11/2 周六6.1.3 直接插入排序直接插入排序 算法分析:关键字比较次数和记录移动次数与记录关键字的初始排列有关。最好情况下,排序前记录已按关键字从小到大有序,每趟只需与前面有序记录序列的最后一个记录比较1次,移动2次记录,总的关键字比较次数为 n-1,记录移动次数为 2(n-1)在平均情况下的关键字比较次数和记录移动次数约为n2/4。直接插入排序是一种稳定的排序方法直接插入排序最大的优点是简单,在记录数较少时,是比较好的办法 2024/11/2 周六6.1.4 希尔排序希尔排序 希尔排序又称缩小增量排序是1959年由D.L.Shell提出来的 算法描述先取定一个小于n的整数d作为第一个增量,把表的全部记录分成d组所有距离为d1的倍数的记录放在同一组中,在各组内进行直接插入排序然后取第二个增量d2d1重复上述的分组和排序,直至增量d1,即所有记录放在同一组中进行直接插入排序为止。2024/11/2 周六6.1.4 希尔排序希尔排序 算法特点先取定一个小于n的整数d作为第一个增量,把表的全部记录分成d组所有距离为d1的倍数的记录放在同一组中,在各组内进行直接插入排序然后取第二个增量d2d1重复上述的分组和排序,直至增量d1,即所有记录放在同一组中进行直接插入排序为止。2024/11/2 周六6.1.4 希尔排序希尔排序 运用实例先取定一个小于n的整数d作为第一个增量,把表的全部记录分成d组所有距离为d1的倍数的记录放在同一组中,在各组内进行直接插入排序然后取第二个增量d2d1重复上述的分组和排序,直至增量d1,即所有记录放在同一组中进行直接插入排序为止。2024/11/2 周六6.1.4 希尔排序希尔排序 算法描述首先取一个整数 gap n(待排序记录数)作为间隔,将全部记录分为 gap 个子序列,所有距离为 gap 的记录放在同一个子序列中在每一个子序列中分别施行直接插入排序。然后缩小间隔 gap,例如取 gap=gap/2重复上述的子序列划分和排序工作,直到最后取gap=1,将所有记录放在同一个序列中排序为止。2024/11/2 周六6.1.4 希尔排序希尔排序 运用实例已知待排序的一组记录的初始排列为:已知待排序的一组记录的初始排列为:21,25,49,2521,25,49,25*,16,08,16,080 1 2 3 4 5 212108082525494925*25*16162024/11/2 周六6.1.4 希尔排序希尔排序 运用实例T=30 1 2 3 4 5212108082525494925*25*16160 1 2 3 4 5212108082525494925*25*1616T=2212108082525494925*25*1616212108082525494925*25*1616T=1212108082525494925*25*1616212108082525494925*25*16162024/11/2 周六6.1.4 希尔排序希尔排序 算法分析开始时 gap 的值较大,子序列中的记录较少,排序速度较快随着排序进展,gap 值逐渐变小,子序列中记录个数逐渐变多,由于前面大多数记录已基本有序,所以排序速度仍然很快Gap的取法有多种。shell 提出取 gap=n/2,gap=gap/2,直到gap=1。2024/11/2 周六6.1.5 选择排序选择排序 排序过程:排序过程:首先通过首先通过n-1次比较,从次比较,从n个数中找出最小的,个数中找出最小的,将它与第一个数将它与第一个数 交换交换第一趟选择排序,结果最小的数被安置在第一个元素位第一趟选择排序,结果最小的数被安置在第一个元素位置上置上再通过再通过n-2次比较,从剩余的次比较,从剩余的n-1个数中找出关键字次小的记录,个数中找出关键字次小的记录,将它与第二个数交换将它与第二个数交换第二趟选择排序第二趟选择排序重复上述过程,共经过重复上述过程,共经过n-1趟排序后,排序结束趟排序后,排序结束2024/11/2 周六6.1.5 选择排序选择排序 排序实例:排序实例:例初始:49 38 65 97 76 13 27 kji=11349一趟:13 38 65 97 76 49 27 i=22738二趟:13 27 65 97 76 49 38 三趟:13 27 38 97 76 49 65 四趟:13 27 38 49 76 97 65 五趟:13 27 38 49 65 97 76 六趟:13 27 38 49 65 76 97 kkkkjjjjjjjjjj2024/11/2 周六6.1.5 选择排序选择排序 算法实例:算法实例:2121252525*25*161608080 1 2 3 4 5212125*25*i=1=14949252516162525161608084949080825*25*49492121i=2=2i=3=30808161625*25*25252121初始初始初始初始49492024/11/2 周六6.1.5 选择排序选择排序 算法实例:算法实例:25*25*0 1 2 3 4 525*25*252516160808494925*25*494921210808161625252121最小者最小者 25*25*无交换无交换无交换无交换最小者最小者 2525无交换无交换无交换无交换2525212116160808各趟排序后的结果各趟排序后的结果2024/11/2 周六6.1.5 选择排序选择排序 算法实例:算法实例:0 1 2 3 4 549491616080825*25*49492121080825*25*25252121i=2时选择排序的过程时选择排序的过程i k j 49492525080825*25*16162121i k j 49 49 25 2525*25*25 251616252516 2516 25i k j 2024/11/2 周六6.1.5 选择排序选择排序 算法实例:算法实例:49492525080825*25*161621210 1 2 3 4 5i k j 21 21 16 16k k 指示当前序列中最小者指示当前序列中最小者指示当前序列中最小者指示当前序列中最小者2024/11/2 周六6.1.5 选择排序选择排序 算法实现:算法实现:输入n 个数给a1 到 anfor i=1 to n-1for j=i+1 to najak真假k=j输出a1 到 ank=iaiaki!=k真假#include main()int a11,i,j,k,x;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,&ai);printf(n);for(i=1;i10;i+)k=i;for(j=i+1;j=10;j+)if(ajak)k=j;if(i!=k)x=ai;ai=ak;ak=x;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);2024/11/2 周六各种排序算法对比分析各种排序算法对比分析排序法 平均时间 最差情形 稳定度 额外空间 备注 冒泡 O(n2)O(n2)稳定 O(1)n小时较好 交换 O(n2)O(n2)不稳定 O(1)n小时较好 选择 O(n2)O(n2)不稳定 O(1)n小时较好 插入 O(n2)O(n2)稳定 O(1)大部分已排序时较好 基数 O(logRB)O(logRB)稳定 O(n)B是真数(0-9),R(个十百)Shell O(nlogn)O(ns)1s2 不稳定 O(1)s是所选分组 快速 O(nlogn)O(n2)不稳定 O(nlogn)n大时较好 归并 O(nlogn)O(nlogn)稳定 O(1)n大时较好 堆 O(nlogn)O(nlogn)不稳定 O(1)n大时较好 2024/11/2 周六阶段小节阶段小节几种常见的排序算法冒泡排序的特点快速排序的特点,一趟排序的子过程2024/11/2 周六本章总结本章总结数据结构与算法初步数据结构与算法初步常见的排序算法重点讲述重点讲述冒泡排序和快速排序的特,同时大概了解直接插入排序,希尔排序和选择排序的基本思路2024/11/2 周六实验实验1题目题目:实现对数组265,301,751,129,937,863,742,694,076,438进行排序,用快速排序方法来实现。并列出每趟排序的结果实验目的实验目的考察快速排序算法的基本思路 了解快速排序算法的每趟操作流程 实验分析实验分析建立一个数组,并初始化进行数据的第一趟快速排序 了解快速排序每趟操作结果,分析排序快速的最快数组类型和最慢数组类型 2024/11/2 周六- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 常见 排序 算法 PPT 学习 课件
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文