数组的排序:冒泡排序
int[] array = {40, 17, 21, 1}; // 1, 17,21,40
第一轮:40冒到最右边
17,40,21,1
17,21,40,1
17,21,1,40 ------- 40 冒出来
第二轮:21冒出来
17,21,1,40
17,1,21,40 ------- 21冒出来
第三轮:17冒出来
1,17,21,40 ------- 17冒出来
所以最多需要排4-1=3次
也就是外层循环只需 array.length - 1 次
外层循环每进行一次说明已经有一个最大的排到最后正确的位置
所以内层循环就可以少操作一次
即内层循环j 每次操作 array.length - 1 - i 次
优化:某一次内层循环进行后所有数字位置没有改变,则说明已经排序好
这是结束程序即可
public void bubbleSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
boolean flag = false;// 优化,用于一次内层遍历没有变化时提前结束程序
//主要部分
//外层循环控制遍历次数
for (int i = 0; i < array.length - 1; i++) {
flag = false;
//内层循环一次代表冒出一个泡,即一个最大值排好
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
swap(array, j, j + 1);//交换
}
}
if (!flag) {// 提前结束,flag如果没被改变说明已经排好(优化)
break;
}
}
}
//交换数组两个位置的元素
public void swap(int[] array, int location1, int location2) {
array[location1] += array[location2];
array[location2] = array[location1] - array[location2];
array[location1] -= array[location2];
}
另外,因为,数组类型是封装数据类型(引用数据类型),不需要return,主函数就能知道传过来的数组改变了



