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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 荣天 中级黑马   /  2012-5-14 16:45  /  2381 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//冒泡排序
        public static void bubblesort(int[] arr){
                for(int x=0;x<arr.length-1;x++){
                        for(int y=0;y<arr.length-x-1;y++){ //-x:让每一次比较元素减1    -1:避免数组越界
                                if( arr[y]<arr[y+1]){
                                         /*
                                        int tmp=arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y+1]=tmp;
                                        */
                                        swap(arr,y,y+1);
                                }
                        }
                }
               
        }

//y<arr.length-x-1   怎么解释呢  有点晕    求大家帮助下  谢谢

7 个回复

倒序浏览
老师举的例子是用冒泡法使数组从小到大排列。arr.length表示的是数组元素的个数,对于7个数,它只需要比较6次,所以要用arr.length-1

第一次比较完以后,最后的数就是最大的了,那么第二次比较的时候就没有必要把它再进行比较,依此类推,所以在第二次比较时要-1,第三次比较时要-2,因此用到了-x

这个减x就表示最后x个数,已经是从小到大排列,那么这x个数就不必再和前面的数进行比较。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
内循环控制次数,图中相邻的2个元素比较,外循环循环一次内循环参与比较的元素就在逐级减少,所以用-x.
int tmp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=tmp;
如果5个数,最大角标是[4],[Y]取到3,[y+1]就是[4],如果不-1[y+1]就会取到[5]角标就越界了。

QQ截图20120514171231.png (13.12 KB, 下载次数: 21)

QQ截图20120514171231.png

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
if (arr[y] < arr[y + 1]) 中要调用arr的第y+1个元素,因此y<arr.length-x-1中arr.length-1是为了避免数据越界,
x每次循环都+1,-x让每次循环比较元素个数-1,就实现了冒泡排序
回复 使用道具 举报
根据你的冒泡算法,。根据arr[y]<arr[y+1],是从大到小排列.所以当x=0的时候y从0到arr.length-1循环的时候,会把最小值放数组到最后,所以第二次,只要比较前arr.length-x-1即可。所以会是y<arr.length-x-1,你只要明白冒泡的思想,就明白了这个道理。我觉得这问题对楼主来说不是很难吧!
回复 使用道具 举报
这样解释下 看我说的你能听懂不 根据毕老师讲的 x美循环一次,每次到内循环都减少一次比较,也就是当x=0时,内循环每个都比较。当x=1时,内循环减少一次比较。依次推出y取值范围为 y<arr.length-x 。不管你内循环里给y怎样变量,y+1也好,y+2也好,y总是要满足他所处的循环体的条件,也就是
y<arr.length
y+1<arr.length
这两个不等式求交集,就得到y的取值范围了。
不知道我说的对不对,我自己的想法而已。说错了请谅解啊。
回复 使用道具 举报
我感觉你并没有真的理解冒泡排序:
我是这么想的:
冒泡排序外层是趟数,内层是相邻两个数比较的次数。
给你画图看看明白不

2.png (158.67 KB, 下载次数: 26)

2.png

1.png (130.99 KB, 下载次数: 22)

1.png

评分

参与人数 1技术分 +2 收起 理由
职业规划-刘倩老师 + 2 赞一个!

查看全部评分

回复 使用道具 举报
荣天 中级黑马 2012-5-14 21:21:42
8#
谢谢了{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马