孙丽云数据结构第8章排序(第22-24讲).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
步长 2:49、 4、 27、49、55、13、65、97、76、38 例: 将序列 49、38、65、97、76、13、27、49、55、4 用 shell 排序的方法进行排序 步长 1:27、 4、49、13、55、33、65、49、76、 97 :4、 13、27、38、49、49、55、65、76、 97 最后的排序结果 例如: 16 25 12 30 47 11 23 36 9 18 31第一趟希尔排序,设增量 d =5 11 23 12 9 18 16 25 36 30 47 31 第二趟希尔排序,设增量 d = 3 9 18 12 11 23 16 25 31 30 47 36 第三趟希尔排序,设增量 d = 1 9 11 12 16 18 23 25 30 31 36 47 分析:shell 排序的分析非常困难,原因是何种步长序列最优难以断定。通常认为时间复杂度为: O(n1.5) 练习:对关键字序列(265,301,751,129,937,863,742,694,076,438)进行希尔排序。(增量为5,3,1) 初始态: 265 301 751 129 937 863 742 694 076 438 第一趟:265 301 694 076 438 863 742 751 129 937? 第二趟:076 301 129 265 438 694 742 751 863 937? 第三趟:076 129 265 301 438 694 742 751 863 937 例:[8,1,10,5,6,*8]采用希尔排序,d=5,3,1 不稳定的排序方法 8.3 交 换 排 序 利用交换记录的位置进行排序的方法称为交换排序。 其基本思想是:两两比较待排序记录的关键字,如果逆序就进行交换,直到所有记录都排好序为止。 常用的交换排序方法主要有冒泡排序和快速排序。 快速排序是一种分区交换排序法,是对冒泡排序方法的改进。 8.3.1 冒泡排序 原理: 若序列中有n个元素,最多进行n-1趟排序。 第1趟,针对第r[1]至r[n]个元素进行。 第2趟,针对第r[1]至r[n-1]个元素进行。 …… 第i趟,针对第r[1]至r[n-i+1]个元素进行。 每一趟进行的过程: 从第一个元素开始,比较两个相邻的元素。若相邻的元素逆序,则进行交换;否则继续比较下面两个相邻的元素。 结束条件:在该趟排序过程中,未出现交换。 冒泡排序 假设在排序过程中,记录序列R[1..n]的状态为: 第 i 趟起泡排序 无序序列R[1..n-i+1] 有序序列 R[n-i+2..n] n-i+1 无序序列R[1..n-i] 有序序列 R[n-i+1..n] 比较相邻记录,将关键字最大的记录交换到 n-i+1 的位置上 void Bubble_Sort(RecType R[],int n) { int i,j,flag=0; for(i=1; in; i++) { flag=1;for(j=1;j=n-i;j++)if(R[j+1].keyR[j].key){ flag=0;R[0]=R[j];R[j]=R[j+1];R[j+1]=R[0];}if(flag==1)return;} } 稳定的排序方法 练习: 1: 将序列1、3、5、7、9、13、27、49 用冒泡排序的方法进行排序。 2: 将序列49、27、13、9、7、5、3、1用冒泡排序的方法进行排序。 例: 将序列49、38、65、97、76、13、27、*49 用冒泡排序的方法进行排序。 时间性能分析: 最好的情况(关键字在记录序列中顺序有序):只需进行一趟起泡 “比较”的次数: 最坏的情况(关键字在记录序列中逆序有序): 需进行n-1趟起泡 “比较”的次数: 0 “移动”的次数: “移动”的次数: n-1 时间复杂度: 正序时 O(n),逆序时 O(n2)。所以时间复杂度 O(n2)。 1、在对一组记录(54,38,96,23,15,72,60,45,83)进行排序,分别采用直接插入排序、希尔排序(d=5,3,1)、冒泡排序方法。 练习 2、排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为( ) 插入排序 8.3.2 快速排序 基本思想:找一个记录,以它的关键字作为“枢轴”,凡其关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。 致使一趟快速排序之后,记录的无序序列R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t],且R[j].key≤ R[i].key ≤ R[j].key(s≤j≤i-1) 基准(i

文档评论(0)

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

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

1亿VIP精品文档

相关文档