氣泡排序法(Bubble Sort)好像是大部分人會接觸的第一個排序法?名字也相當可愛,顧名思義數字會像泡泡一樣滾來滾去最終慢慢浮出水面。
想法
基本概念就是重複來回跑要排序的數列,從頭開始,過程中一次比較兩個元素,如果順序錯了,兩個就互換。一直重複這個操作,直到不需要交換任何元素,表示排序完成。
從上面的敘述就可以知道概念上很簡單,時間執行上會很可怕XD
Best
空間複雜度:\(O(1)\)
時間複雜度:\(O(n)\)
Average
空間複雜度:\(O(1)\)
時間複雜度:\(O(n^2)\)
Worst
空間複雜度:\(O(1)\)
時間複雜度:\(O(n^2)\)
實際操作
突然發現寫起來有點麻煩XDD 從頭開始,要排序的數列是 array = [5, 8, 2, 9, 5, 6, 3]。
isSorted 預設為 true,若數列有變動過順序則值就會轉變為 false,沒有被變動過表示已經沒有元素互相比較了,也就是說已經排序完成。
i = 0array[0] < array[1],不用動,i 移往下一個元素。
array = [5, 8, 2, 9, 5, 6, 3]
i = 1array[1] > array[2],array[0] 和 array[1] 互相交換。因為動過了,isSorted 改為 false。
array = [5, 2, 8, 9, 5, 6, 3]
i = 2array[2] < array[3],不用動,i 移往下一個元素。
array = [5, 2, 8, 9, 5, 6, 3]
i = 3array[3] > array[4],array[3] 和 array[4] 互相交換。
array = [5, 2, 8, 5, 9, 6, 3]
i = 4array[4] > array[5],array[4] 和 array[5] 互相交換。
array = [5, 2, 8, 5, 6, 9, 3]
i = 5array[5] > array[6],array[5] 和 array[6] 互相交換。
array = [5, 2, 8, 5, 6, 3, 9]
OK,已經跑過一輪後,因為 isSorted 是 false,所以我們要再重複上述步驟一遍又一遍,直到 isSorted 的值為 true。
#include <vector>
using namespace std;
vector<int> bubbleSort(vector<int> array) {
bool isSorted = false;
while (!isSorted){
isSorted = true;
for (int i = 0; i < array.size() - 1; i++){
if (array[i] > array[i + 1]){
swap(array[i], array[i + 1]);
isSorted = false;
}
}
}
return array;
}








