黑马程序员技术交流社区

标题: 冒泡排序的问题 [打印本页]

作者: falonsokaka914    时间: 2014-10-18 22:41
标题: 冒泡排序的问题
public static void bubbleSort(int[] arr){
  for (int x = arr.length-1; x > 0; x--)
  {
   for (int y = 0; y < x; y++)  //这里的y <  x  和 y < arr.length-1-x 有什么区别?
                                         //希望各位学习好给讲解一下,谢谢。
   {
    if (arr[y] > arr[y+1])
    {
     
     int temp = arr[y];
     arr[y] = arr[y+1];
     arr[y+1] = temp;
    }
   }
  }
}

作者: 鲸鱼先生.    时间: 2014-10-18 23:04
如果换成 y < arr.length-1-x,这冒泡排序就是错的了,就不会跟数组最后一个元素比较!
作者: falonsokaka914    时间: 2014-10-18 23:06
不会啊,老师也是这么讲的, 自己运行的时候也没问题
作者: Eagle    时间: 2014-10-18 23:07
x是变化的,-1是固定的
作者: Eric1225    时间: 2014-10-18 23:09
应该是一种从后往前,一种从前往后冒泡
作者: 油油油菜花    时间: 2014-10-18 23:11
楼主的排序应该是从小到大吧!而且是从后往前排! 冒泡就有两种方法,一种是从前往后,一种是从后往前,
作者: mudao    时间: 2014-10-18 23:11

由于你外循环x的取值,也就使两个循环控制着排序从后往前冒泡。每一轮过后,X之后的数字已经排好序,所以y+1最多遍历到x,所以你的内循环条件应该y<x。y < arr.length-1-x 的前提条件是外循环x=0;开始的,也就是最小值从前冒泡往后冒泡。
作者: falonsokaka914    时间: 2014-10-18 23:12
y < arr.length-1-x?  还是y < arr.length-1?
作者: 鲸鱼先生.    时间: 2014-10-18 23:14
falonsokaka914 发表于 2014-10-18 23:06
不会啊,老师也是这么讲的, 自己运行的时候也没问题

  你确定把y<x换成 y < arr.length-1-x是正确的吗?我试的是错的
作者: falonsokaka914    时间: 2014-10-18 23:25
鲸鱼先生. 发表于 2014-10-18 23:14
你确定把y

错了, 如果外循环x的值是0,x++的话,那么内循环y < arr.length-1-x就是对的
作者: 油油油菜花    时间: 2014-10-18 23:27
说错了,如果外部循环条件是(int x=0;x<arr.length;x++) 那么下面就应该是y<arr.length-1-x;  因为内部循环没遍历一次就能排好一个数,那么下次遍历的时候就可以少判断一次!
作者: 鲸鱼先生.    时间: 2014-10-18 23:27
falonsokaka914 发表于 2014-10-18 23:12
y < arr.length-1-x?  还是y < arr.length-1?

嗯  y < arr.length-1是对的!题目中你写错了!
作者: falonsokaka914    时间: 2014-10-18 23:37
油油油菜花 发表于 2014-10-18 23:27
说错了,如果外部循环条件是(int x=0;x

外循环的x<arr.length-1;吧,假如数组长度是6,那最大的索引就是5啊,应该-1吧
作者: 鲸鱼先生.    时间: 2014-10-18 23:41
y < x比 y < arr.length-1-x更效率些,

因为y<x可以根据变量x值的变化,从而减少内侧循环的循环次数,已排列好的元素则不用再去比较。

而 y < arr.length-1则需要每次遍历数组中所有的元素,自然做了无用功。

以上为个人理解,如有错误请提出!
作者: falonsokaka914    时间: 2014-10-18 23:43
鲸鱼先生. 发表于 2014-10-18 23:41
y < x比 y < arr.length-1-x更效率些,

因为y

恩,大神说的很对
作者: 油油油菜花    时间: 2014-10-19 00:04
falonsokaka914 发表于 2014-10-18 23:37
外循环的x

第一次x=0;y最大是5,因为你是用array[y]与array[y+1]比较!
作者: 油油油菜花    时间: 2014-10-19 00:05
falonsokaka914 发表于 2014-10-18 23:37
外循环的x

要是x=1了 y最大就是4 是y<arr.length-x-1
作者: wtjohn    时间: 2014-10-19 00:25
arr.length= x
你再  arr.length-x 这不就=0了么。。。
y<0。。。。循环都跑不成啊
作者: 郑飞    时间: 2014-10-20 23:30
内外循环搭配 有前后两种 觉得自己习惯哪个就用哪个
作者: liu951753xz    时间: 2014-10-20 23:35
这题有意思。学习下了




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