黑马程序员技术交流社区

标题: 冒泡排序法第二层for循环帮忙解释一下 [打印本页]

作者: Qiubang    时间: 2016-2-10 21:25
标题: 冒泡排序法第二层for循环帮忙解释一下
public static void main(String[] args) {
                int[] arr={67,45,9,56,34,97,45,18,4,78,90,345,54,2,34,98};
                //冒泡排序法 从小到大
                for (int i = 0; i < arr.length-1; i++) {
                        for (int j = 0; j < arr.length-1-i; j++) {   //减i是什么意思啊
                                if(arr[j]>arr[j+1]){
                                        int temp=arr[j];
                                        arr[j]=arr[j+1];
                                        arr[j+1]=temp;
                                }
                        }
                }


作者: boboyuwu    时间: 2016-2-10 22:04
为什么要减i  你要理解冒泡拍排序的思想, 你想一下比如{3,2,5} 第一次比较: 3跟2比较,2跟5比较,这样比较互换之后,最大或者最小的是不是都跑到最后一个位置了第一次比较之后变成了{2,3,5}  是不是说最后一个就不用参与比较了,依次类推,每次相互比较之后最后一个数都不用比较了,j代表每次比较多少次,所以每次都要减1哦

作者: zrg658159    时间: 2016-2-10 22:30
哈哈刚好我最近把这块学通了。我是这么理解的 冒泡排序法第一圈最值出现在最后,到第二圈比较时第一圈出现在最后的最值将无需参加比较,以此后推每比完一圈就少比较一个元素 也即有y<arr.length-i
作者: 一步一脚印=-=    时间: 2016-2-15 00:24
外层执行一次后,有一个最大值就找出来了,内层循环自然要少一次...外层执行俩次后有俩个最大值找出来了,内层循环自然可以少俩次,,,所以依次类推
作者: liuxiaoye    时间: 2016-2-15 21:21
排完序的就不用在排序了
作者: Qiubang    时间: 2016-2-15 22:14
boboyuwu 发表于 2016-2-10 22:04
为什么要减i  你要理解冒泡拍排序的思想, 你想一下比如{3,2,5} 第一次比较: 3跟2比较,2跟5比较,这样比较互 ...

恩恩,理解了,谢谢
作者: bolt    时间: 2016-2-16 12:49
我也要当高级黑马
作者: zhanganping    时间: 2016-2-16 21:10
一楼正解,必须先理解冒泡原理




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