全文共373字,预计耗时112秒。
冒泡排序(Bubble Sort)
是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
简单实现
严格意义上来说,不算标准的冒泡排序算法,因为它不满足:两两比较相邻记录
的冒泡排序思想
function bubbleSort(list){
let i, j, len = list.length;
for(i = 0; i < len; i++){
for(j = i + 1; j <= len; j++){
if(list[i] > list[j]){
[list[i], list[j]] = [list[j], list[i]];
}
}
}
}
标准实现
function bubbleSort(list){
let i, j, len = list.length;
for(i = 0; i < len; i++){
for(j = len - 1; j >= i; j--){
if(list[j] > list[j+1]){
[list[j], list[j+1]] = [list[j+1], list[j]];
}
}
}
}
优化实现
根据有无交换确认是否已经有序,避免不必要的遍历比较。
function bubbleSort(list){
let i, j, len = list.length;
let swaped = true;
for(i = 0; i < len && swaped; i++){
swaped = false;
for(j = len - 1; j >= i; j--){
if(list[j] > list[j+1]){
[list[j], list[j+1]] = [list[j+1], list[j]];
swaped = true;
}
console.log(list.join(","))
}
}
}
更优化实现
针对冒泡端点初始有序情况下,减少不必要的比较次数。
function bubbleSort(list){
let i, j, len = list.length;
let swaped = true;
let sortBorder = 0;
let lastSwapIndex = len - 1;
for(i = 0; i < len && swaped; i++){
swaped = false;
for(j = len - 1; j >= sortBorder; j--){
if(list[j] > list[j+1]){
[list[j], list[j+1]] = [list[j+1], list[j]];
swaped = true;
lastSwapIndex = j
console.log(`${i},${j}:`,list.join(","))
}
}
sortBorder = lastSwapIndex;
}
}
复杂度
1+2+3+...+(n-1)=n(n-1)/2次,因此时间复杂度为O(n2)
Loading...