原理:將序列劃分為無(wú)序和有序區(qū),不斷通過(guò)交換較大元素至無(wú)序區(qū)尾完成排序。
要點(diǎn):設(shè)計(jì)交換判斷條件,提前結(jié)束以排好序的序列循環(huán)。
private static void sortBubble(int[] array) {
boolean isSort = true;
for (int i = 1; i < array.length && isSort; i++) {
isSort = false; //是否需要排序
for (int j = 0; j < array.length - 1; j++) {
if (array[j] > array[j + 1]) { //降序只需將>改為<
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isSort = true;
}
}
printArray(String.format(Locale.getDefault(), "第 %2d 趟 : ", i), array);
}
}
結(jié)果:
原數(shù)組: 55 22 66 33 11 99 77 44 88
冒泡排序:
第 0 趟 : 22 55 33 11 66 77 44 88 99
第 1 趟 : 22 33 11 55 66 44 77 88 99
第 2 趟 : 22 11 33 55 44 66 77 88 99
第 3 趟 : 11 22 33 44 55 66 77 88 99
第 4 趟 : 11 22 33 44 55 66 77 88 99
局部排序
private static void sortBubble(int[] array, int start, int end) {
boolean isSort = true;
end = Math.min(end, array.length);
for (int i = start; i < end && isSort; i++) {
isSort = false;
for (int j = start; j < end - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isSort = true;
}
}
printArray(String.format(Locale.getDefault(), "第 %2d 趟 : ", i), array);
}
}
對(duì)數(shù)組的【2,7)排序結(jié)果:
原數(shù)組: 55 22 66 33 11 99 77 44 88
冒泡排序:
第 2 趟 : 55 22 33 11 66 77 99 44 88
第 3 趟 : 55 22 11 33 66 77 99 44 88
第 4 趟 : 55 22 11 33 66 77 99 44 88