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

ocean's blog

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

 
 
 

日志

 
 

冒泡排序算法之一  

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

  下载LOFTER 我的照片书  |

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

冒泡排序算法思想简单,很容易用编程语言实现,因而在实际编程中用得还比较多。它的主要排序思想就是重复交换相邻的两个反序元素。我们用从小到大排列整数来说明这个过程:第一轮首先处理第1个数和第2个数,使这两个数从小到大排列,然后在前次处理后的基础上处理第2个数和第3个数使其从小到大排列,以此类推,直到处理完第n-1个和第n个数,这样第一轮处理结束。这时最后一个数(第n个元素)必定就是所有数中的最大数;重复上面的过程进行第二轮处理,同样首先处理第1个数和第2个数,使这两个数从小到大排列,然后在前次处理后的基础上处理第2个数和第3个数使其从小到大排列,以此类推,直到处理完第n-1个和第n个数,第二轮处理结束,这样第n-1个数必定是所有数中的第二大数,所以这时最后两个数排序已完成。然后进行第三轮第四轮,直到第n轮,所有数就都排序好了。

为了更好的理解上面的排序过程,我们用一个简单的例子来分析一下其排序过程。假定有一组待排序整数:3,5,2,1    现在我们要把这4个数按升序排列。

第一轮处理:

处理第一个数和第二个数即3和5后的结果为:3,5,2,1

处理第二个数和第三个数即5和2后的结果为:3,2,5,1

处理第三个数和第四个数即5和1后的结果为:3,2,1,5

我们可以看到第一轮处理完后最大数5已经排到最后了,然后进行第二轮处理:

处理第一个数和第二个数即3和2后的结果为:2,3,1,5

处理第二个数和第三个数即3和1后的结果为:2,1,3,5

处理第三个数和第四个数即3和5后的结果为:2,1,3,5

第二轮结束,进行第三轮处理:

处理第一个数和第二个数即2和1后的结果为:1,2,3,5

处理第二个数和第三个数即2和3后的结果为:1,2,3,5

处理第三个数和第四个数即3和5后的结果为:1,2,3,5

第四轮处理:所有数都排序好了,所以我们在这里省略这一轮的过程。

有了前面的分析过程,我们很容易用c语言写出冒泡排序程序:

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

{

int i, j;

int tmp;

for (i = 0; i < count; i++) {

for (j = 0; j < count - 1; j++) {

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

tmp = a[j];

a[j] = a[j + 1];

a[j + 1] = tmp;

}

}

}

return;

}

上面的代码是把最大的数逐渐往后移动,大家也可以改改上面的代码把最小的数从后面往前移动,也就是经过第一轮处理后最小的一个数被移到了位置0上。

这篇文章只介绍了冒泡排序算法最基本的写法,下一篇我们会在这篇的基础上优化一下代码,还会实现双向冒泡排序以巩固我们对冒泡排序算法的理解。

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

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

历史上的今天

评论

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

页脚

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