A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 西贝 中级黑马   /  2016-2-1 08:50  /  1130 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 西贝 于 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,原来我一直把冒泡排序的代码写错了
不过,按照我的代码,也可以实现排序,这叫什么排序?
计算次数跟冒泡应该是一样的。

12 个回复

倒序浏览
Mayer 来自手机 中级黑马 2016-2-1 11:16:31
沙发
你的判断语句就错了
回复 使用道具 举报 1 0
你这是选择排序
回复 使用道具 举报 1 0

哦,酱紫啊
回复 使用道具 举报
选择排序
回复 使用道具 举报
额。。这不是冒泡。。。
回复 使用道具 举报

选择排序
回复 使用道具 举报
冒泡排序比较的是相邻的元素,也就是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: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:27
10#
arr是地址,还是?明天看看运行结果。
回复 使用道具 举报
这是选择排序      而且还有错误!!   int temp = arr[i];                                 arr[i] = arr[j];                                 arr[j] = temp;
回复 使用道具 举报
这不是冒泡排序,是选择排序。排序的方式不同,结果一样。
回复 使用道具 举报
刺客015 发表于 2016-2-2 09:20
这是选择排序      而且还有错误!!   int temp = arr;                                 arr = arr[j];   ...

人家不就是这杨写的么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马