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]));