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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张占忠 中级黑马   /  2012-12-22 10:15  /  2504 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天看 基础06-04 的时候,遇到了一个问题!原来这么写的!
public static int[] bubbleSort(int[] arr){
        for (int x=0; x<arr.length-1;x++){
                for(int y=0;y<arr.length-x-1;y++){
                        if(arr[y]>arr[y+1]){
                                swap(arr,y,y+1);
                        }
                        }
        }
        return arr;
}
确实,没有什么,但是 我如果! 在第一个,FOR循环里 加上一个-x, 他们两个的结构,是一样的!然后,我就蒙了!
public static int[] bubbleSort(int[] arr){
        for (int x=0; x<arr.length-1;x++){
                for(int y=0;y<arr.length-x-1;y++){
                        if(arr[y]>arr[y+1]){
                                swap(arr,y,y+1);
                        }
                        }
        }
        return arr;
}

问题是, 外部FOR,循环了几次! 内部循环了几次。结果,是如何遍历出来的?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
对不起,发错了,第二个,程序是这样的!
public static int[] bubbleSort(int[] arr){
        for (int x=0; x<arr.length-x-1;x++){
                for(int y=0;y<arr.length-x-1;y++){
                        if(arr[y]>arr[y+1]){
                                swap(arr,y,y+1);
                        }
                        }
        }
        return arr;
}

回复 使用道具 举报
由于,我表达的不够清楚!就是说。第一个程序没有,问题!但是,第二个,加了-X之后,的结果,和第一个,是一样的!
ArrayTool类
public static int[] bubbleSort(int[] arr){
        for (int x=0; x<arr.length-x-1;x++){
                for(int y=0;y<arr.length-x-1;y++){
                        if(arr[y]>arr[y+1]){
                                swap(arr,y,y+1);
                        }
                        }
        }
        return arr;
}

public static void swap(int[]arr,int a,int b){
        int temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
}

ArrayToolDemo类

public static void main(String[] args) {
                int[] arr={70,1,3,32,9};
                ArrayTooy.bubbleSort(arr);
                for(int x:arr){            System.out.println(x);        }

        }

结果:1  3   9  32  70
大家可以试一下,我现在就是想知道,是如何被遍历出来的! 已经蒙了!
回复 使用道具 举报
99,88,77,66,55,44,33,22,11如果换成这组数据  结果就不对了   这个遍历过程很好理解   
冒泡排序外循环是控制从数组第一个数开始一直到倒数第二个数结束
内循环是控制以外循环选择的数为起点以后向后进一个数 两两比较  知道最后两个数比较
你如果把外循环的中指条件换成Array.length-x-1 如果是五个数的数组70,1,3,32,9相当于  外循环进行了两次也就是第一次循环冒泡得到的数组为1,3,32,9,70
第二次循环得到1,3,9,32,70  所以结果是对的 如果就拿五个数为例  拿一组需要冒泡三次以上的  你的言论就不成立了  比如55,44,33,22,11
第一次循环44,33,22,11,55 第二次循环为33,22,11,44,55 返回结果是这个  还有其实你可以不用返回数组类型  因为是引用数据类型类似于c的指针  不是形参直接操作的就是原地址
最后  谢谢  希望能对你有所帮助  PS:如果循环搞不懂试着在纸上一步一步走  或者用调试工具  很有趣味的

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李百韬 发表于 2012-12-22 10:49
99,88,77,66,55,44,33,22,11如果换成这组数据  结果就不对了   这个遍历过程很好理解   
冒泡排序外循环是 ...

感谢的帮助!已经明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马