黑马程序员技术交流社区

标题: 关于冒泡排序 [打印本页]

作者: 何竹冬    时间: 2013-1-6 18:36
标题: 关于冒泡排序
本帖最后由 何竹冬 于 2013-1-6 20:07 编辑

我自己写的冒泡排序
  1. //冒泡排序
  2. public static void bubbleSort(String[] arr)
  3. {
  4. for(int i=arr.length-1;i>0;i--)//比较次数
  5. {
  6. for(int j=0,z=j+1;j<i;j++,z++)//相邻比较
  7. {
  8. if((arr[j].compareTo(arr[z]))>0)
  9. swap(arr,j,z);
  10. }
  11. }

  12. }
复制代码
毕向东老师的冒泡排序
  1. //冒泡排序
  2. public static void bubbleSort(String[] arr)
  3. {
  4. for(int i=0;i<arr.length-1;i++)
  5. {
  6. for(int j=0;j<arr.length-i-1;j++)
  7. {
  8. if((arr[j].compareTo(arr[j+1]))>0)
  9. swap(arr,j,j+1);
  10. }
  11. }

  12. }
复制代码
感觉毕向东老师的方法很简洁啊,谁能说一下区别,还有毕向东老师的冒泡排序第一个循环和第二个循环各控制什么?
我的第一个循环控制比较次数第二个循环相邻比较。


作者: 李培根    时间: 2013-1-6 18:45
手机上网,看不到代码。
毕老师冒泡排序外循环控制循环次数,内循环相邻比较,且外循环增加一次内循环比较减少一次
作者: 黑马刘杰    时间: 2013-1-6 19:37
本帖最后由 黑马刘杰 于 2013-1-6 19:41 编辑

毕老师的冒泡排序的外循环控制第几趟比较,内循环控制比较的次数
例如对5241排序
第一趟:
第一次、 2 5 4 1;第二次、2 4 5 1;第三次、2 4 1 5;  三次后最大值5“沉底”
第二趟:
第一次、2 4 1 5; 第二次、2 1 4 5; 两次后除5外剩下的最大值4“沉低”到5上面,当然不用和最低下的5比较啦,所以次数就减少一次
第三趟:
第一次、1 2 4 5 ;排序完成!
作者: 何竹冬    时间: 2013-1-6 20:05
多谢大家
作者: 358998716@qq.co    时间: 2013-1-6 20:30
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

  冒泡排序算法的运作如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
这个是链接和详细的代码操作...
冒泡排序

作者: 王瀛    时间: 2013-1-6 20:50
简单说,如果说从第一个元素比较到最后一个元素为“一趟”

那么 毕老师的 外循环控制的是 “趟数”(第几趟/次)

内循环是相邻元素比较




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