冒泡排序比较简单,不断交换相邻的两个逆序元素。
假设有数组:[5, 4, 1, 2, 3]
- 第一次交换:[4, 5, 1, 2, 3]
- 第二次交换:[4, 1, 5, 2, 3]
- 第三次交换:[4, 1, 2, 5, 3]
- 第四次交换:[4, 1, 2, 3, 5]
可以想象到,元素5像泡沫一样浮出水面。
public static void bubbleSorting(int[] array){
int temporaryValue;
for (int i = array.length - 1; i >= 0; i--) {
for (int j = 0; j + 1 <= i; j++) {
// 升序排序
if(array[j] > array[j+1]) {
temporaryValue = array[j];
array[j] = array[j+1];
array[j+1] = temporaryValue;
}
}
}
}
优化一下,如果没有发生交换,说明已经排序好
public static void bubbleSortingOptimize(int[] array) {
int temporaryValue;
boolean haveSwap;
for (int i = array.length - 1; i >= 0; i--) {
// 设置为false,说明未发生交换
haveSwap = false;
for (int j = 0; j + 1 <= i; j++) {
// 升序排序
if(array[j] > array[j+1]) {
temporaryValue = array[j];
array[j] = array[j+1];
array[j+1] = temporaryValue;
haveSwap = true;
}
}
// 如果haveSwap仍为false,说明未发生交换
if (!haveSwap){
break;
}
}
}