注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ocean's blog

平常心——可以寂寞,但不允许空虚

 
 
 

日志

 
 

双向冒泡排序  

2009-05-30 15:29:12|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

版权所有,转载请注明:本文出自学与思编程网

双向冒泡排序是在冒泡排序的基础上改进而来的,其基本思想跟最原始的冒泡排序是一样的,只不过排序过程稍微优化了一点。

我们还是以整数升序排序为例来简单说说这种排序的过程:首先从前往后把最大数移到最后,然后反过来从后往前把最小的一个数移动到数组最前面,这一过程就是第一轮,然后重复这一过程,最终就会把整个数组从小到大排列好。双向冒泡排序要稍微优于传统的冒泡排序,因为双向排序时数组的两头都排序好了,我们只需要处理数组的中间部分即可,而单向即传统的冒泡排序只有尾部的元素是排好序的,这时每轮处理都需要从头一直处理到已经排好序元素的前面一个元素。虽然它在效率上有了点改进,但它也不能大幅度提高其排序的效率,这是由冒泡排序的基本过程所决定了的。下面是代码:

void bubblesort(int a[], int count) //升序

{

int i, left, right;

int t;

int tmp;

left = 0, right = count - 1;

while (left < right) {

for (i = left; i < right; i++) {//大数沉底

if (a[i] > a[i + 1]) {

tmp = a[i];

a[i] = a[i + 1];

a[i + 1] = tmp;

t = i;

}

}

right = t;

for (i = right; i > left; i- -) {//小数上浮

if (a[i - 1] > a[i]) {

tmp = a[i - 1];

a[i - 1] = a[i];

a[i] = tmp;

t = i;

}

}

left = t;

}

return;

}

如果您对这个排序过程不是很清楚,请仔细阅读上面的代码,要做到真正理解才会有所收获。可能平时我们还会遇到其它形式的冒泡排序,但万变不离其宗,只要牢固的掌握了基本思想,相信无论怎么变化,也不难理解。

版权所有,转载请注明:本文出自学与思编程网

  评论这张
 
阅读(227)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017