主要是区分内层循环和外层循环做的事情,内层循环做比较,外层循环做比较的次数
public static void main(String[] args) {int[] arr = {1, 3, 5, 7, 8, 3, 4, 6, 0};System.out.println(Arrays.toString(bubbleSort(arr)));}public static int[] bubbleSort(int[] arr) {if (arr != null && arr.length > 0) {/*** -1 的原因* i = 0 内层循环的 执行过程* 13 35 57 78* 83 exchange(8,3) 1, 3, 5, 7,3,8,4,6,0* 84 exchange(8,4) 1, 3, 5, 7,3,4,8,6,0* 86 exchange(8,6) 1, 3, 5, 7,3,4,6,8,0* 80 exchange(8,0) 1, 3, 5, 7,3,4,6,0,8* @result : {1,3,5,7,3,4,6,0,8}* i = 1 内层循环的 执行过程* 13 35 57 73* 73 exchange(7,3) 1,3,5,3,7,4,6,0,8* 74 exchange(7,4) 1,3,5,3,4,7,6,0,8* 76 exchange(7,6) 1,3,5,3,4,6,7,0,8* 70 exchange(7,0) 1,3,5,3,4,6,0,7,8* 78* @result : { 1,3,5,3,4,6,0,7,8}* .....* i = arr.length -2** i = arr.length -1** 之间的区别* 当i = arr.length - 2 时 内层循环* j = 0 ; j < 2 ;j++* - j = 0 arr[0] arr[1]比较* - j = 1 arr[1] arr[2] 比较* 当 i = arr.length -1 是 内层循环* j = 0 ; j < 0 ; j++***/for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] < arr[j + 1]) {arr[j] = arr[j + 1] + arr[j];arr[j + 1] = arr[j] - arr[j + 1];arr[j] = arr[j] - arr[j + 1];}}}}return arr == null ? new int[]{} : arr;}// 运行结果 :[8, 7, 6, 5, 4, 3, 3, 1, 0]
