描述:
进行相邻元素的比较,每次遍历确定一个最大/最小值
代码实现:
let a = [9, 1, 4, 3, 2, 5, 6, 8, 7];
function BubbleSort(array) {
for (let i = 0; i < array.length - 1; i++) {
for (let j = 0; j < array.length - 1 - i; j++) {
if(array[j] > array[j+1]){
let temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
BubbleSort(a);
时间复杂度:
- 最好:O(n²)
- 最坏:O(n²)
- 平均:O(n²)
优化:
设置一个标志位来避免不必要的循环
优化代码:
let a = [9, 1, 4, 3, 2, 5, 6, 8, 7];
function BubbleSort2(array) {
for (let i = 0; i < array.length - 1; i++) {
let isSwap = false;
for (let j = 0; j < array.length - 1 - i; j++) {
if(array[j] > array[j+1]){
let temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
isSwap = true;
}
}
if(!isSwap){
return;
}
}
}
BubbleSort(a);
优化后的时间复杂度:
最好:O(n²) => O(n)