黑马程序员技术交流社区

标题: 求解,这个算不算冒泡排序? [打印本页]

作者: 西贝    时间: 2016-2-1 08:50
标题: 求解,这个算不算冒泡排序?
本帖最后由 西贝 于 2016-2-1 09:02 编辑
  1. public static void bubble(int[] arr) {
  2.         int temp;
  3.         for (int i = 0; i < arr.length - 1; i++) {
  4.                 for (int j = i+1; j < arr.length; j++) {
  5.                         if (arr[i] > arr[j]) {
  6.                                 temp = arr[i];
  7.                                 arr[i] = arr[j];
  8.                                 arr[j] = temp;
  9.                         }        
  10.                 }
  11.         }
  12.         for (int i = 0; i < arr.length; i++) {
  13.                 System.out.println(arr[i]);
  14.         }
  15. }
复制代码

听了课之后发现,所谓冒泡排序,是值数组中两个相邻数字比较。
Oh My God,原来我一直把冒泡排序的代码写错了
不过,按照我的代码,也可以实现排序,这叫什么排序?
计算次数跟冒泡应该是一样的。
作者: Mayer    时间: 2016-2-1 11:16
你的判断语句就错了
作者: 黑夜中那颗星    时间: 2016-2-1 11:57
你这是选择排序
作者: 西贝    时间: 2016-2-1 14:03
黑夜中那颗星 发表于 2016-2-1 11:57
你这是选择排序

哦,酱紫啊
作者: tujiu888    时间: 2016-2-1 14:19
选择排序
作者: 呵呵1122    时间: 2016-2-1 14:45
额。。这不是冒泡。。。
作者: yi651312197    时间: 2016-2-1 21:38

选择排序
作者: New灬狼    时间: 2016-2-1 22:24
冒泡排序比较的是相邻的元素,也就是0,1一组,1,2一组,2,3一组,直到没有相邻元素为止;你外循坏int i=0;内循环int i+1;  第一次循环的时候是0,1一组,但是第二次以后就是0,2,一组0,3一组....直到j<arr.length结束内循环,i++;i=1;进入内循坏,但是这时候会出现当j<arr.leng的时候,j=i+1就会出现角标越界,所以你根本就完成不了排序!
作者: New灬狼    时间: 2016-2-1 22:46
New灬狼 发表于 2016-2-1 22:24
冒泡排序比较的是相邻的元素,也就是0,1一组,1,2一组,2,3一组,直到没有相邻元素为止;你外循坏int i=0; ...

我看错了,可以排序,不会出现角标越界的问题,因为是j=i+1;而条件是j<arr.length,而i<arr.leng-1,随着i的增加,比较次数不断减少,但是却是i和每一个元素都要比一次,最后一次是,arr[arr.length-2]>arr[arr.length-2+1],和选择排序是一样的,因为选择排序的最后排序是arr[arr.length-2]和arr[arr.length-1],所以你的是选择排序,只不过写法上稍微有点改变。
作者: ysh速度    时间: 2016-2-1 23:53
arr是地址,还是?明天看看运行结果。
作者: 刺客015    时间: 2016-2-2 09:20
这是选择排序      而且还有错误!!   int temp = arr[i];                                 arr[i] = arr[j];                                 arr[j] = temp;
作者: ChiCaoMa    时间: 2016-2-2 20:46
这不是冒泡排序,是选择排序。排序的方式不同,结果一样。
作者: 呼雁潇    时间: 2016-2-2 22:18
刺客015 发表于 2016-2-2 09:20
这是选择排序      而且还有错误!!   int temp = arr;                                 arr = arr[j];   ...

人家不就是这杨写的么




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