黑马程序员技术交流社区

标题: 冒泡算法 [打印本页]

作者: 马毅    时间: 2012-12-11 21:14
标题: 冒泡算法
本帖最后由 Mayi 于 2012-12-11 21:53 编辑

上一篇帖子介绍了选择排序算法,这篇帖子介绍和其灰常类似的一个算法――冒泡算法(BubbleSort)
 

冒泡算法是比较相邻的两个元素,按照排序方向交换两个元素的位置,每次将一个元素沉到最后,以达到排序的目的

以下是实现代码:
  1.     int temp;
  2.             for (int i = 0; i < ary.Length;i++ )
  3.             {
  4.                 for (int j = 0; j < ary.Length -1-i;j++ )
  5.                 {
  6.                     if(ary[j] > ary[j+1])
  7.                     {
  8.                         temp = ary[j+1];
  9.                         ary[j + 1] = ary[j];
  10.                         ary[j] = temp;
  11.                     }
  12.                 }
  13.             }
复制代码
选择排序 和 冒泡排序都是通过多次迭代来达到排序的目的,效率不高,习惯称之为蛮力法

列表帖子http://bbs.itheima.com/thread-33497-1-1.html

作者: 邵帅    时间: 2012-12-11 21:31
你的里层循环条件应该是j < ary.Length -1-i ,这样才是标准的冒泡。冒泡排序主要思想就是两层循环,最重要的一个就是里层循环的条件, 即j < ary.Length -1为什么两层循环,是按照一个规律比如说十个数是9,8,7,6,5,4,3,2,1,0第一趟比较第一个数比较9次,第二趟比较第一个数比较8次,第三趟比较第一个数比较7次,根据这个规律推出来的里层循环条件即j < ary.Length -1-i。这个只是规律,但是如果这个条件变成 j < ary.Length-1答案也对,但是就是多做了好多次无效比较。 那个第几趟就是外层的循环条件。
作者: 马毅    时间: 2012-12-11 21:53
邵帅 发表于 2012-12-11 21:31
你的里层循环条件应该是j < ary.Length -1-i ,这样才是标准的冒泡。冒泡排序主要思想就是两层循环,最重要 ...

正解,粗心了~~
作者: 985127948    时间: 2012-12-13 03:34
冒泡排序从大到小的排序,第二个for循环用小于号,从小到大的排序,第二个for循环用大于号。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2