网站大量收购独家精品文档,联系QQ:2885784924

数据结构案例教程课件:排序.pptxVIP

数据结构案例教程课件:排序.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

排序

导学问题网络购物中的商品排序在淘宝网、京东、当当、亚马逊等网络商城购物时,大家常用的一项功能就是排序。如图所示,在搜索手机时,网站提供按销量排序、按上市时间排序、按价格排序以及综合排序等选项供用户进行比较和挑选。试设计并编写程序帮助找出销量最高的五款手机中上市时间最近的(新款)手机。

9.1知识学习排序的基本概念排序:设有n个记录的序列{r0,r1,…,rn?1},其相应的关键字分别是{k0,k1,…,kn?1},排序是将这n个记录重新排列,使之按关键字大小递增(或递减)有序排列。

9.1知识学习9.1.1排序的基本概念排序分分类内排序:在排序的整个过程中,待排序的所有记录全部被放置在内存中外排序:由于待排序的记录个数太多,不能同时放置在内存,而需要将一部分记录放置在内存,另一部分记录放置在外存上,整个排序过程需要在内外存之间多次交换数据才能得到排序的结果。

9.1知识学习9.1.1排序的基本概念排序算法的稳定性:假定在待排序的记录集中,存在多个具有相同键值的记录,若经过排序,这些记录的相对次序仍然保持不变,即在原序列中,ki=kj且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

9.1知识学习9.1.1排序的基本概念排序算法的性能指标1.时间开销:⑴比较:关键码之间的比较;⑵移动:记录从一个位置移动到另一个位置。2.空间开销:辅助存储空间3.算法的稳定性

9.1知识学习9.1.2交换类排序基本思想:两两比较待排序记录的关键字,若反序则交换相邻两记录,直到没有反序的记录为止。两种交换排序方法:冒泡排序快速排序

冒泡排序voidBubbleSort(intr[],intn)//数组r中的n个数据保存在0~n-1中{ inti,j,temp; for(i=1;in;i++) for(j=0;jn-i;j++) if(r[j]r[j+1]) { temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; }}交换排序的主要操作是交换主要思想是:在待排序列中选两个记录,将它们的关键码相比较,如果反序(即排列顺序与排序后的次序正好相反),则交换它们的存储位置。

冒泡排序的时间性能分析最好情况(正序):比较次数:n-1移动次数:0时间复杂度为O(n)。

最坏情况(反序):54321时间复杂度为O(n2)。43215321452134512345比较次数:移动次数:2)1(1-=?=nn(n-i)n-1i2)1(1-=?=n3n3(n-i)n-1i平均情况:时间复杂度为O(n2)。冒泡排序的时间性能分析

冒泡排序的性能分析在平均情况下,冒泡排序的时间复杂度与最坏情况同数量级。冒泡排序只需要一个记录的辅助空间,用来作为记录交换的暂存单元。冒泡排序是一种稳定的排序方法。

快速排序首先选一个轴值(即比较的基准),通过一趟排序将待排序记录分割成独立的两部分,前一部分记录的关键码均小于或等于轴值,后一部分记录的关键码均大于或等于轴值,然后分别对这两部分重复上述方法,直到整个序列有序。需解决的关键问题:⑴如何选择轴值?⑵如何实现分割(称一次划分)?⑶如何处理分割得到的两个待排序子序列?⑷如何判别快速排序的结束?

问题1:如何选择轴值?选择轴值的方法:1.使用第一个记录的关键码;2.选取序列中间记录的关键码;3.比较序列中第一个记录、最后一个记录和中间记录的关键码,取关键码居中的作为轴值并调换到第一个记录的位置;4.随机选取轴值。选取不同轴值的效果:决定两个子序列的长度,子序列的长度最好相等。

13652750384955ji1338652750495513652750493855jjiiijijjj问题2:如何实现一次划分?

解决方法:①取第一个记录的关键字值作为基准,将第一个记录暂存于temp中,设两个变量i,j分别指示将要划分的最左、最右记录的位置。②将j指向的记录关键字值与基准值进行比较,如果j指向的记录关键字值大,则j前移一个位置;重复此过程,直到j指向的记录关键字值小于基准值;若ij,则将j指向的记录移到i所指位置。③将i指向的记录关键字值与基准值进行比较,如果i指向的记录关键字值小,则i后移一个位置;重复此过程,直到i指向的记录关键字值大于基准;若ij,则i指向的记录移到j所指位置。④重复②、③步,直到i=j。问题2:如何实现一次划分?

算法描述:intPartition(intr[],inti,intj){ inttemp=r[i]; while(ij) {

文档评论(0)

ning2021 + 关注
实名认证
文档贡献者

中医资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年05月10日上传了中医资格证

1亿VIP精品文档

相关文档