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

第三章查找和排序技术.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章查找和排序技术

2.冒泡排序的算法实现 如用变量m记录从前往后扫描时发生最后一次交换的位置;用k记录从后往前扫描时发生最后一次交换的位置。 则下一次扫描子表的范围是 k~m。k不断增大,m不断减小,当k≥m时,表示这个表已排序好。 所以,m取值 = 0 停止扫描(从前往后扫描,子表变为空) 0 需扫描 k取值 = n 停止扫描(从后往前扫描,子表变为空) n 需扫描 算法3.5 对无序序列P(1:n)进行冒泡排序。 PROCEDURE BUBSORT ( P, n ) k=1; m=n WHILE (km) DO { j=m-1; m=0 FOR i=k TO j DO IF ( P (i) P (i+1)) THEN { d= P(i); P(i)=P(i+1); P(i+1)=d; m=i ;} j=k+1; k=n; FOR i=m TO j BY –1 DO IF ( P(i-1) P (i)) THEN { d= P(i); P(i)=P(i-1); P(i+1)=d; k=i;} } RETURN 从冒泡排序的算法可看出,若待排序的元素长度为n,则在最坏的情况下,需要从前向后扫描n/2遍,从后向前扫描n/2遍,需要进行(n-1)+(n-2)+...+2+1=n(n-1)/2次比较, 因此冒泡排序算法的时间复杂度为O(n2)。由于其中的元素移动较多,所以属于排序中速度较慢的一种。空间复杂度为O(1)。 二、 快速排序(Quick Sorting) 1.快速排序的基本思想 任取待排序序列中的某个元素作为基准,通过一趟排序,将一个无序表分割成左右两个独立子区,其中左子序列元素的排序码均不大于基准元素的排序码,右子序列的排序码均不小于基准元素的排序码,然后分别对两个子序列继续进行分割,直至所有子序列为空或只有一个元素为止。 把待排序区间按照基准元素的排序码分为左右两个子序列的过程叫做一次分割。 2.快速排序的算法实现 ⑴ 线性表的分割 选基准元素T,在表第一个、中间一个与最后一个元素中选取中间项P(k),将P(k)赋给T,再将表中第一个元素移到P(k)位置上 (或用第一个元素作基准元素,将P(1) 赋给T);空出第一个元素位置。然后设置两个指针i和 j分别指向表的起始与最后位置。反复作以下两步: ① 将j逐渐减小,并逐一比较P(j)与T,直到发现一个P(j)T为 止,将P(j)移到 P(i)位置上,空出P(j)位置; ② 将i逐渐增加,逐一比较 P(i)和T,直到发现一个P(i) T为止, 将 P(i)移到 P(j)位置上,空出P(i)位置; 上述两个操作交替进行,直到指针i与j指向同一个位置(i=j)为止,此时将T移到P(i)的位置上。 这个过程实际上是将所有小于T的元素移到表的前部,而将所有大于T的元素移到表的后部,最后以T为界将线性表分为前后两部分,前一部分排序码的值不大于T,后一部分排序码的值不小于T。 例:给定排序码为:(46,55,13,42,94,05,17,70) 选取第一个元素为基准元素,T = P(1) = 46 [ 46 55 13 42 94 05 17 70 ] i j [ 46 55 13 42 94 05 17 70 ] i j [ 17 55 13 42 94 05 17 70 ] i j [ 17 55 13 42 94 05 55 70 ] i j [ 17 05 13 42 94 05 55 70 ] i j [ 17 05

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档