您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页一种改进的冒泡排序算法

一种改进的冒泡排序算法

来源:意榕旅游网
维普资讯 http://www.cqvip.com

A New Improved Sortin9 Al9orithm 王俊亭 曹建芳 wang Junting Cao Jianfang (1.忻州市工业学校教务处,山西忻州034000;2.忻州师范学院计算机系,山西忻州034000) (1.Xinzhou Industry School,Shanxi Xinzhou 034000;2.Department of Computer,Xinzhou Teachers’College,Shanxi Xinzhou 034000) 摘要:提出了一种冒泡排序的改进算法,并对其性能与传统的冒泡排序算法的性能进行了实验比较。 关键词:排序;算法;算法复杂度 中图分类号:TP30 1.6 文献标识码:A 文章编号:l 67 l一4792一(20O8)7—0067一O2 Abstract:This paper presents a new improved sorting algorithm and compares the performance Of the algorithn with that conventional bubble sorting algorithm. KevwordS:Sorting:Algorithm;Algorithm Computation Complexity 0 l引言 顺序不对,则进行交换,并将标识变量flag置l,继续比 目前,最常见的排序算法有:冒泡排序法、选择排序 较;②若在某次循环结束后,flag为0,则证明该数组已经 法、快速排序法。冒泡排序法是一种简单的排序算法,由于 性能很差,只有在待排数据量很小的时候才会选用它。选择 排序法的性能有很大的提高,但当待排数据量很大的时候, 排好序,不必再比较,循环结束。 2 l排序算法 排序算法如下: void bubble(int item[];int n) { int i,J,temp,flag; 它也不能胜任。据悉,快速排序法在所有的排序算法之中, 效率最高,在对大数据量进行排序时常采用它。本文推出一 种效率更高的改进的冒泡排序算法。 1 l一种改进的冒泡排序算法的思想 int b[NUM]; //存放每次排序的内循环次数 int p; flag=O;p=O; 传统的冒泡排序算法需要元素之间一次次相互比较,这 是影响排序速度的一个主要原因。随着待排元素个数的增 加,比较次数几乎呈几何级数增长。而这种改进后的冒泡排 序算法在大多数情况下,会减少待排数据之间的重复比较, 只要增加一个标识变量,如果在某次比较过程中,标识变量 未发生变化,则可证明数据已经有序,不必再进行比较,这 //存放外循环次数 for0=1;i<NUM;i”) b[i]=0; for(i=l;i<NUM;i+十) { flag=O; 样就大大提高了效率。下面是改进的冒泡排序的实验过程。 设待排序数组为一维数组A,其元素个数为NUM。 创建一个标识变量flag,初始化flag=O。 排序开始:①将数组A中的相邻元素进行大小比较,若 for(J=1;i<NuM_i;J+十) { if(item[J]>item[d+1]) 维普资讯 http://www.cqvip.com

{temD=item[J】; item[j]=item[j+1]; item[j+1]=temp; flag=l;)//交换item[J】与item[j+l】,并将flag置1 b[i】:Lj; 根据实验数据可以看出: 当待排序元素基本有序时,本排序算法的时间复杂度会 大大降低,而传统的冒泡排序算法所需时间复杂度会随着待 排序元素个数的增加而大大增加。 5 I结论 -种 —_ 改 进 的 冒 泡 ) 本排序算法在待排序元素大多有序的情况下,会大大节 排 p=i; if(flag--0) break; 省时间,降低算法的时间复杂度,有时其时间复杂度可达0 (n),具有一定的实用性。 6 I本算法的优缺点 算 序 法 ) . 本算法只有在待排序数据元素基本有序的情况下,不愧 ) 3_与传统的冒泡排序法的实验比较 设数组A有9个元素,按从小到大的顺序排序。 (1)如果待-N 的数组元素原来已经排序或只有相邻的 一为一种好算法,但如果待排数据元素杂乱无章,那本算法和 传统的冒泡排序法效果一样。在大多数场合下,本算法优点 大于缺点,是实用的。 对数未排好序(如:2,5,9,6,17,19,23,56,7s), 参考文献 Ke。gh、P.Aitke 、B.L.J。 es著.冯博琴等译.c 语言程序设计轻松入门[MJ北京:机械工业出版社,1996. ..则本算法只执行8次循环即可结束,而传统的冒泡排序法需 执行9 8=72次循环; 【1】J(2)又如:x,I-=b ̄N( 2, o,23,19,46,37,76, 9o,92),本算法只执行3o次循环即可结束,而传统的冒泡 社,【2】谭浩强.c程序t2tf ̄A[.].北京:清华大学出版 2OO7. 排序法需执行9 8=72次循环; (3)再如:对于数据( OO,93,85,80,78,74,6o, 59,34),本算法与传统的冒泡排序算法一样,需要执行72 ‘ [3]]uzNL ̄.数据结构[M】.北京:清华大学出版社,2OO5. c程序设计试题汇编[Afj.北京:清华大学 [41谭浩强.出版社,1998. 次循环; (4)经过反复实验比较,本算法在最坏的情况下,即所 有待 }j}序元素顺序都不正确时,其时间复杂度与传统的冒泡 【5】徐德民.现代c语言程序设计教程[M】.天津:南开大 学出版社,1994. 排序法一样,其余情况本算法的时间复杂度均小于传统冒泡 排序法的时间复杂度。而且可以看出:在数据量很大的情 况下,本算法在一定情况下可大大降低时间复杂度,这是很 实用的。4 i实验结果的进一步分析 作者简介 王俊亭(1979 ),男,大学本科 山西忻州市工业学 校教务处; 曹建芳(1976一),女,大学本科,硕士,山西忻州师 范学院计算机系。 1 4Q 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务