之前学习数组的排序算法的时候,感觉都理解了,而且还给自己留了本,结果没想到,前两天看到又有些地方迷惑了,是正常现象,还是普遍小白都这样啊?大家帮我往下看看,给我点意见,帮我进步一下呗。
//冒泡算法的概念就不描述了,我刚才又练习了一下,我先把刚出炉的code帖上来
package com.tlz.test1;
import java.util.Arrays;
public class BubbleSoft {
public static void main(String[] args) {
int arr[] = Array_Soft();
int[] ints = bulleSoft(arr);
System.out.println(Arrays.toString(ints));
}
private static int[] Array_Soft() {
return new int[]{0,8,6,4,2,3,1,7,5,9};
}
private static int[] bulleSoft(int[] array){
for (int i = 0; i <= array.length; i++) {
for (int j = 0; j < array.length-1 -i; j++) {
if (array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
}
注释里,我写了不懂的点,有没有大佬说明说明,还有就是冒泡算法实现上两层嵌套的问题, 外层循环比较好理解,就是控制排序比较的轮次数,条件值从0开始的话,i 的判断条件就 <= 数组长度,因为数组的下标索引是从0开始计数的。也或者,不设置成<= 就直接 < ,那就在属性长度方法后面 减掉个1就行。 然后是内层循环。
内层循环的话肯定需要-i,因为每轮排序结束之后,都会把当前轮次比较出来的最大值,放到数组元素的最大所以处,(这个根据倒排还是正排的设置),减i,就是正好轮次比较结束之后,下标索引正好指向最大元素上,所以每下一轮都减去每上一轮的最大元素。因为内层循环控制的就是,每个排序比较轮次内的元素嘛。
那-1呢?我的理解是每两个元素进行比较,也就是在每个内轮循环内,都会进行两个元素的控制,毕竟if 判断条件在那写着的嘛。所以每次拿两个比,下次比较的时候就减少一个,如果不减少一个的话,就会ArrayIndexOutOfBoundsException。
还是不太能说到点上,求解一下。
|