一种改进的冒泡排序算法研究.docVIP

  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文档。上传文档
查看更多
一种改进的冒泡排序算法研究.doc

一种改进的冒泡排序算法研究 摘要:在一些数据处理中,排序占有极其重要的位置。一些资料表明,约有近50%以上的CPU处理时间是用于排序数据上的,因此,数据排序就显得尤为重要。本论文阐述了一种改进的冒泡排序法:分析提出这种冒泡排序算法适合应用的数据环境和包含的分支算法。 关键词:数据处理;冒泡排序;复杂度;执行效率 一、传统冒泡排序实现方法 对于某个初始数据,依次比较相邻两个数据,若两个数据大小不符合排序要求时对其交换,直到所有数据有序。 例如:对s[8] 49,37,65,97,76,12,27,49 用传统冒泡排序法实现数据排序。 初始记录:49 37 65 97 76 12 27 49 一次扫描:37 49 65 76 12 27 49 97 二次扫描:37 49 65 12 27 49 76 97 三次扫描:37 49 12 27 49 65 76 97 四次扫描:37 12 27 49 49 65 76 97 五次扫描:12 27 37 49 49 65 76 97 六次扫描:12 27 37 49 49 65 76 97 七次扫描:12 27 37 49 49 65 76 97 过程分析与算法的实现。第一次扫描:对初始记录从头至尾依次比较相邻的两个数据大小,若发现大小相反的,小的数据在前、大的数据在后,交换两数据位置。即连续比较(s[0],s[1]),(s[1],s[2]),(s[2],s[3])…,(s[6],s[7]);对于每对相临的两个气泡(s[n-1],s[n]),若s[n-1] s[n],则交换s[n-1]和s[n]的内容。 第一次扫描结束后,“最大”的气泡就飘至该序列的最后面,就是最大值被移动至数组最后的位置s[7]上。第七次扫描:经过7趟扫描后即可完成,最终生成有序记录s[0]~s[7]。 由于每一次扫描都使有序序列增加了一个“气泡”,在经过n-1次排序扫描后,有序序列中就增加为n-1个气泡,而无序序列中“气泡”的大小总是小于等于有序序列中“气泡”的大小,因此整个冒泡排序的执行过程最多要执行n-1趟排序扫描。 二、分析与改进方法 通过上面分析可以看出,原始冒泡排序对于n个数据记录来说,整个过程需要执行n-1趟排序,但对于这n-1趟排序过程中,是否有空操作呢?如果某一趟执行过程中没有实现数据的交换,可以说明欲排序的序列中所有数据都满足轻者在前,重者在后的原则,所以,排序执行可在此趟排序后结束,不用再进行无必要的执行。 例如排序这样的一个数组序列 13,30,65,65,45,65,65,65 ,进行冒泡排序。 开始数据序列:13 30 65 65 45 65 65 65 第一趟执行后:13 30 65 45 65 65 65 65 第二趟执行后:13 30 45 65 65 65 65 65 第三趟执行后:13 30 45 65 65 65 65 65 第四趟执行后:13 30 45 65 65 65 65 65 第五趟执行后:13 30 45 65 65 65 65 65 第六趟执行后:13 30 45 65 65 65 65 65 第七趟执行后:13 30 45 65 65 65 65 65 从实例可以看出,经过两次交换后,记录序列就生成完成,不用再进行排序的执行。因此,可以依据此过程实现一个改进执行的冒泡排序――“标志冒泡排序(ImproveBubble)”。 为减少没必要的检查比较,在上述“标志冒泡排序(ImproveBubble)”的基础上还可以加改进,提出“标志冒泡排序(ImproveBubble)”改进后的算法“记住最后一次交换发生位置的冒泡排序(ImproveBubblesort)”。 其具体过程为: 在每一次扫描过程中,找出并确定最后一次数据执行交换的位置p,可以确认p后面的几个相邻数据均已经有序。下趟排序开始执行前,s[p,…,n-1]就是有序数据范围,w[1,…,p-1]就是无序数据范围。如此执行,每趟排序可以使当前有序数据范围扩充多个数据记录,进而减少排序的次数。 例如,一个数组 101,12,18,41,45,44,67,95,98 ,对其执行“记住最后一次交换发生位置的冒泡排序(ImproveBubblesort)”。 原始记录序列:101 12 18 41 45 44 67 95 98第一趟执行后:12 18 41 45 44 67 95 98 101 第二趟执行后:12 18 41 44 45 67 95 98 101第三趟执行后:12 18 41 44 45 67 95 98 101 可以看出,用“记住最后一次交换发生位置的冒泡排序(ImproveBubblesort)”对这9个数的执行排序后, 3次扫描后即可完成,而原始“冒泡排序(Bubblesort)”要执行8次才能

文档评论(0)

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

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

1亿VIP精品文档

相关文档