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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© falonsokaka914 中级黑马   /  2014-10-18 22:41  /  2073 人查看  /  19 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
    }
   }
  }
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

19 个回复

倒序浏览
如果换成 y < arr.length-1-x,这冒泡排序就是错的了,就不会跟数组最后一个元素比较!
回复 使用道具 举报
不会啊,老师也是这么讲的, 自己运行的时候也没问题
回复 使用道具 举报
x是变化的,-1是固定的
回复 使用道具 举报
应该是一种从后往前,一种从前往后冒泡
回复 使用道具 举报
楼主的排序应该是从小到大吧!而且是从后往前排! 冒泡就有两种方法,一种是从前往后,一种是从后往前,
回复 使用道具 举报
mudao 中级黑马 2014-10-18 23:11:30
7#

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

  你确定把y<x换成 y < arr.length-1-x是正确的吗?我试的是错的
回复 使用道具 举报

错了, 如果外循环x的值是0,x++的话,那么内循环y < arr.length-1-x就是对的
回复 使用道具 举报
说错了,如果外部循环条件是(int x=0;x<arr.length;x++) 那么下面就应该是y<arr.length-1-x;  因为内部循环没遍历一次就能排好一个数,那么下次遍历的时候就可以少判断一次!
回复 使用道具 举报
falonsokaka914 发表于 2014-10-18 23:12
y < arr.length-1-x?  还是y < arr.length-1?

嗯  y < arr.length-1是对的!题目中你写错了!
回复 使用道具 举报
油油油菜花 发表于 2014-10-18 23:27
说错了,如果外部循环条件是(int x=0;x

外循环的x<arr.length-1;吧,假如数组长度是6,那最大的索引就是5啊,应该-1吧
回复 使用道具 举报
y < x比 y < arr.length-1-x更效率些,

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

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

以上为个人理解,如有错误请提出!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
鲸鱼先生. 发表于 2014-10-18 23:41
y < x比 y < arr.length-1-x更效率些,

因为y

恩,大神说的很对
回复 使用道具 举报

第一次x=0;y最大是5,因为你是用array[y]与array[y+1]比较!
回复 使用道具 举报

要是x=1了 y最大就是4 是y<arr.length-x-1
回复 使用道具 举报
wtjohn 中级黑马 2014-10-19 00:25:18
18#
arr.length= x
你再  arr.length-x 这不就=0了么。。。
y<0。。。。循环都跑不成啊
回复 使用道具 举报
郑飞 高级黑马 2014-10-20 23:30:55
19#
内外循环搭配 有前后两种 觉得自己习惯哪个就用哪个
回复 使用道具 举报
这题有意思。学习下了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马