Bubble Sort(冒泡排序)
Bubble Sort 是一種簡單的排序算法,它重複地遍歷待排序的數列,比較相鄰的元素,並在必要時交換它們的位置。每一次遍歷序列後,至少有一個元素會被移動到其最終位置。這個過程重複,直到沒有更多的元素需要交換,意味著數列已經排序完成。
虛擬碼(Pseudo-code)
下面是 Bubble Sort 的虛擬碼表示:
plaintext
Copy code
function bubbleSort(array):
n = length(array)
do
swapped = false
for i = 1 to n-1:
if array[i-1] > array[i]:
swap(array[i-1], array[i])
swapped = true
n = n - 1
while swapped
虛擬碼解釋
初始化數列長度 n。
進入一個 do-while 循環,循環條件是 swapped 變量,它檢查在一次完整的遍歷中是否有元素被交換過。
對數列從頭到尾進行一次遍歷,比較相鄰的元素,並在必要時進行交換。
如果發生交換,將 swapped 設為 true。
經過每一次的遍歷,減少 n 的值(最大的元素已經在正確的位置,無需再次檢查)。
當一次遍歷中沒有任何交換時,表示排序已完成,退出循環。
效能分析(Big-O)
最壞情況時間複雜度:O(n^2)
當數列完全逆序時,每個元素都需要與它之後的每個元素比較並可能交換,這導致了 n + (n-1) + (n-2) + ... + 1 = n(n+1)/2 次比較,簡化後的時間複雜度為 O(n^2)。
最佳情況時間複雜度:O(n)
當數列已經完全排序時,第一次遍歷發現沒有需要交換的元素,因此只遍歷了一次數列,執行了 n-1 次比較。
平均情況時間複雜度:O(n^2)
對於隨機排列的數列,冒泡排序幾乎總是會執行接近最壞情況的比較次數。
空間複雜度:O(1)
Bubble Sort 是一種原地排序算法,它不需要額外的存儲空間,除了少數臨時變量外。
結論
Bubble Sort 因其實現簡單而被廣泛學習,但由於其平均和最壞情況下的性能,它通常不適用於大規模數據集的排序。在實際應用中,更高效的排序算法(如快速排序、堆排序或归并排序)通常會被選用。