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

来源 :速读·中旬 | 被引量 : 0次 | 上传用户:liongliong550
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在一些数据处理中,排序占有极其重要的位置。一些资料表明,约有近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次才能实现完成,大大提升了算法的执行效率。
  综上所述,冒泡排序就是为了得到一个升序或者降序的有序序列。但是达到目的并不是理解排序算法的最终目标,理解排序算法的根本意义是在于有效解决象排序一样的实际问题。参考文献:
  [1]李春葆等.数据结构设计题典[M]. 北京:清华大学出版社,2002.368-422
  [2](印)克里斯哈拉莫斯(Krishnamoorthy,R.),(印)库玛纳维尔(Kumaravel,G.I.),数据结构[M].北京:清华大学出版社,2009.376-459
  [3]云微. 排序算法的分析与比较实现[J]. 科技信息, 2008.(33).912-915
  [4]李宝艳,马英红. 排序算法研究[J]. 电脑知识与技术(学术交流), 2007.(08).1903-1906
其他文献
《穷人》一文,作者通过穷苦的安娜抱回了邻居西蒙家的两个孩子的故事,生动鲜活的描绘了安娜激烈、复杂的心理斗争,既展现了她心理发展的过程,又体现了她心里发展的多种形式,充分赞
复习课作为课程教学必不可少的组成部分,其主要目的是将已学知识中的重难点和零散的知识综合起来,通过归纳、整合、深加工,从而形成清晰、全面、系统的知识结构,以促进学生对复习内容的记忆、理解、巩固和深化。然而,许多学生对复习课不重视。有的认为“复习的内容已基本掌握,炒冷饭,浪费时间。”有的说“复习课一综合,平时学的东西没掌握好,容易顾此失彼。”面对如此令人焦虑的复习课现状,我引入思维导图进行教学实践探索
在城市中进行基础设施的工程建设时,应更加重视城市道路桥梁的建设.如果没有控制好道路桥梁的施工质量,就会使其在使用中出现一定程度的安全问题,可能对人民群众的生命以及财
科技的进步发展以及城市化建设的不断推进,促进了建筑业的发展,同时房建形式及其布局也变得日益复杂,房建室内空间为了满足不同功能的需要,通常会应用错层.而房建错层设计是
摘 要:在当前社会关系日趋复杂的状况下,权力的关系和概念逐渐被模糊化,这就导致在一定程度上,一些西方国家中的行政法更加盛行,并逐渐发展,具有了法律体系中较为重要的地位。但是这也在一定程度上推动了行政法的新挑战,并逐渐确定了现代行政法的主要地位。受到传统形式下的文化以及现实生活的影响,利益问题在我国的行政法中被漠视,没有在实际法律行使过程中发挥出其应有的效果和意义。因此,在我国社会主义逐渐发展和完善
期刊
为探究吕家坨井田地质构造格局,根据钻孔勘探资料,采用分形理论和趋势面分析方法,研究了井田7
期刊
摘 要: 随着学校办学条件的改善,多媒体操作台等一些现代教育设施在学校运用越来越广泛。多媒体课件汇集了文字、图形、动画、视频、声音、特殊效果等,包含无限想象空间,以其形象性、直观性特点有力地推动了课堂教学效率的提高和学习方式的转变。然而,由于一些教师运用多媒体技术的技能不熟练,使各科多媒体教学尤其是政治课多媒体教学暴露出缺点和问题。因此,如何充分利用多媒体课件的优点,扬长避短,把多媒体课件和传统教
筑工程施工质量管理对提升建筑质量、保障建设项目经济和社会效益具有重要作用,同时其也是影响建筑安全性能的重要冈素之一,在建筑工程项目管理中占据着越来越重要的地位.
 目的:探讨不同形式的肝癌抗原修饰的树突状细胞(DC)的抑瘤功能。方法:分别用肝癌H22冻融抗原、H22小分子抗原肽和Hsp70-H22抗原肽复合物修饰DC;用MTT比色法分析DC激活的CTL