Bubble sort 气泡排序法
Bubble sort 气泡排序法
複杂度
複杂度 | Big O |
---|---|
最差时间複杂度 Worst-case time complexity | Big O(n^2) |
平均时间複杂度 Average-case time complexity | Big theta (n^2) |
最佳时间複杂度 Best-case time complexity | Big omega (n) |
空间複杂度 Space complexity | Big O (1) |
演算法
1. 比较首 2 个阵列元素,将数字较大元素放在右方
2. 右方元素持续与后方阵列元素比较,持续将数字较大元素放在右方
3. 最后最大的元素会在阵列最右方
4. 持续这个步骤,将剩馀的阵列元素做比较
持续地将最大元素比较放在右方,右方就会依序存放由大到小的数字
程式
JavaScript
function bubbleSort(sortNumberList) {
for (var finishCompareCount = 0; finishCompareCount < sortNumberList.length; finishCompareCount++) {
// 设定比较完的元素数量,确保所有元素大小都比较完了
// 最后要比较的元素索引:扣除已经比较完的元素 + 最后元素不需要再跟后方比较
var finalCompareElementIndex = sortNumberList.length - finishCompareCount - 1;
for (var compareIndex = 0; compareIndex < finalCompareElementIndex; compareIndex++) {
// 从第一个元素开始比较,直到比到最后一个元素前
var leftNumber = sortNumberList[compareIndex];
var rightNumber = sortNumberList[compareIndex + 1];
//Value comparison using ascending order
if (leftNumber > rightNumber) {
// 当「左方数字」比「右方数字」大,将两个数字交换,大的数字放在右方
[sortNumberList[compareIndex + 1],sortNumberList[compareIndex]] = [sortNumberList[compareIndex],sortNumberList[compareIndex + 1]];
}
}
}
// 已排序清单
return sortNumberList;
}
console.log(bubbleSort([5, 3, 8, 4, 6]));
TypeScript
function bubbleSort(sortNumberList: number[]){
for(let finishCompareCount = 0; finishCompareCount < sortNumberList.length; finishCompareCount++){
// 设定比较完的元素数量,确保所有元素大小都比较完了
// 最后要比较的元素索引:扣除已经比较完的元素 + 最后元素不需要再跟后方比较
let finalCompareElementIndex = sortNumberList.length - finishCompareCount - 1;
for(let compareIndex = 0; compareIndex < finalCompareElementIndex; compareIndex++){
// 从第一个元素开始比较,直到比到最后一个元素前
let leftNumber: number = sortNumberList[compareIndex];
let rightNumber: number = sortNumberList[compareIndex + 1];
if(leftNumber > rightNumber){
// 当「左方数字」比「右方数字」大,将两个数字交换,大的数字放在右方
[sortNumberList[compareIndex + 1],sortNumberList[compareIndex]] = [sortNumberList[compareIndex],sortNumberList[compareIndex + 1]];
}
}
}
// 已排序清单
return sortNumberList;
};
console.log(bubbleSort([5,3,8,4,6]));