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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hf529270451 中级黑马   /  2015-11-11 20:07  /  613 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public void BubbleSort(int[] arr) {
                for (int i = 0; i < arr.length; i++) {
                        for (int j = 0; j < arr.length-1-i; j++) {
                                if(arr[j] > arr[j+1]) {
                                        jiaohuan(arr, j);
                                }
                        }
                }
        }
内层循环为什么是length-1-i啊   每次循环不是因该是从int j = 0+ i 开始吗  

评分

参与人数 1黑马币 +12 收起 理由
wonderge + 12 加分鼓励!

查看全部评分

2 个回复

倒序浏览
本帖最后由 萧未然 于 2015-11-11 20:21 编辑

首先,冒泡排序原理是(如上从小到大排):每一个外层元素跟内层的未确定大小比较,只要冒出较大数就挖出来,往后排而为什么-1?因为内层循环中有下标j+1的比较,第一个:不-1的话,当i=0时,内层比较中就越界了呀
再:当i每次跟内层元素j比较完后都得到了从后往前的最大值,所以当外层i++时,就可以比较除了这个最大值下标的其他值啦,而i每次自增1,
通过内层就慢慢的取出了从小到大的序列了
建议画图
回复 使用道具 举报
本帖最后由 mandoooo 于 2015-11-11 20:37 编辑

第一个for写错了
for (int i = 0; i < arr.length-1; i++) {      //必须要减1 因为最后一圈剩了一个数,所以他没必要比了。
第二个for的arr.length-1-i里减-1的原因是
for(arr[j]>arr[j+1])的条件里
例如你的数组长度是 4的话
arr[1]比arr[2]
arr[2]比arr[3]
arr[3]比arr[4]        但是没有arr[4]这个元素,因为数组的总长度是4,他的最后元素是arr[3],所以要减1才行

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马