0.时间复杂度
n*n
1.非正式冒泡排序
private static void informalBubbleSort(int[] array) {
if (Objects.isNull(array)) {
throw new RuntimeException("array is null");
}
print(array);
int temp;
for (int i = 0; i < array.length - 1; i ++) {
for (int j = i + 1; j < array.length; j ++) {
if (array[i] > array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
print(array);
}
}
非正式冒泡排序 改变>/< 就可以改变大小顺序
它的思想就是拿第一个元素 依次和第二 第三个元素比较 如果满足条件就交换。然后拿第二个元素与第三 第四个元素比较...
2.正式冒泡排序
private static void formalBubbleSort(int[] array) {
if (Objects.isNull(array)) {
throw new RuntimeException("array is null");
}
print(array);
int temp;
// 代表轮询次数 次数总是length-1
for (int i = 1; i < array.length; i ++) {
for (int j = 0; j < array.length - i; j ++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
print(array);
}
}
正式冒泡排序 改变>/< 就可以改变大小顺序
它的思想就是相邻2个元素比较 满足条件就交换位置
3.已优化的正式冒泡排序
private static void optimalBubbleSort(int[] array) {
if (Objects.isNull(array)) {
throw new RuntimeException("array is null");
}
print(array);
int temp;
// 代表轮询次数 次数总是length-1
for (int i = 1; i < array.length; i ++) {
int key = 0;
for (int j = 0; j < array.length - i; j ++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
key = 1;
}
}
if (key == 0) {
break;
}
print(array);
}
}
它与正式冒泡排序不同之处在于 当大范围两两交换顺序已经不需要再交换 小范围就没有必要继续下去了