c语言中的冒泡排序算法优化
张朝鑫 ,颜昌沁
(昭通学院信息科学与技术学院 ,云南昭通 557000)
摘 要 排序是计算机程序设计语言中常见的内容 ,其中冒泡排序一般是以大数往后沉的方式来实现。传统的做法会
出现大量的无效操作 ,造成资源的浪费,经过一定的改进后 ,这样的算法效率得以提高。从其本质特点出发 ,进而分
析其特点得 出更为高效的优化方式。
关键词 算法 ;冒泡排序 ;优化
中图分类号 :TP301 文献标识码 :A 文章编号 :1671—7597(2013)19—0166—01
数学中的数值大小在计算机中经常需要按规律排列 ,传统 在进行到第3趟排序后已经排好。后面的6次排序均为无效操作。
算法有冒泡排序法和选择排序法两种。其中数冒泡排序法较为
’.2优化后的冒泡排序
经典。本文从传统方法的冒泡排序入手 ,对其进行常见的改进
上述 1.1中的算法简单、容易理解 ,但有很多情况下它都
算法分析比 ;最后提出一种比较更为合理的优化算法。
有几趟排序是不会有任何的操作。为了避免这种情况一些专家
1传统的■泡排序及改进 和学者提 出使用一个标记变量来解决,即当排序不发生任何数
1.1传统的冒泡排序 据交换时就立即停止 ;这样的解决办法即避免了无效的重复排
序 ,又避免了有限资源的浪费。
传统意义上 的冒泡排序算法为大家所熟悉。其基本思路
具体 的做法是 :在上述程序 的第 5行下加上语句 “int
为 :将数据序列存入数组中 ,如有 number个数需要排序则将
flag:”,第 lO行下加上语句 “flag=O:”,第 16行下加上语句
相邻的两个数进行比较 ,较大的数往后排列 ,如此类推则进行
“flag=1:”,第 l7行下加上语句 “if(flag==0)break:”;这样
number一1次 比较以后最大的一个数一定排在了数组的最后。这
在程序的外层循环执行到第4次的时候满足 了if的真分支 ,执
样进行一趟 比较就找出并定位一个数 ,重复以上操作number—1
行跳 出语句 ,结束并输出结果 ,显然程序执行的效率大为提高 ,
次即完成排序 。如下程序以定义宏为 l0个数为例 ,其中程序 的
l8行至 21行功能是打印输出每趟排序 的结果。(请在Vc下调 2一种提高 100%效率的优化算法——同时前后■泡
试程序 ,否则不能正常显示汉字) 从上面 的程序算法 中大家可以看出 ,不管数据序列如何 ,
1 #inc1ude 每趟排序至少能完成一个位置 的排序 ,即较大的数往后 冒泡。
2 #defineNUMBER lO 反过来思考同样较小的数也一样可以往前冒泡 ,而算法都是一
3 voidmainO 样的 :如果让其二者同时进行 ,其效率 自然提高一倍。程序的
4 { 循环体是从数组的最后一个开始执行 ,一趟小数向前冒泡至少
5 int NU