[排序] 泡沫排序法
泡沫排序法(冒泡排序法)
原理: 通過連續比較與交換鄰近元素實現排序
假設輸入有順序性的數組時, 最佳時間複雜度可為 O(n)
- 穩定排序
- 自適應排序
- 空間複雜度為 O(1)
- 時間複雜度為 O(n^2), 不管平均或最壞
def bubble_sort(nums)
pointer = 0
while pointer < nums.size - 1
sub_pointer = 0
while sub_pointer < pointer
# 當前元素小於比較元素就交換
if nums[pointer] < nums[sub_pointer]
# swap
nums[sub_pointer], nums[sub_pointer + 1] = nums[sub_pointer + 1], nums[sub_pointer]
end
sub_pointer += 1
end
pointer += 1
end
return nums
end
puts bubble_sort([76, 98, 28, 51, 14, 44, 21, 13, 90, 97])
優化版 - 泡沫排序法
可以多加個 flag
, 假設這輪沒有排序就直接退出該迴圈, 但時間複雜度不變
def optimization_bubble_sort(nums)
pointer = 0
while pointer < nums.size - 1
sub_pointer = 0
flag = false
while sub_pointer < pointer
if nums[pointer] < nums[sub_pointer]
nums[sub_pointer], nums[sub_pointer + 1] = nums[sub_pointer + 1], nums[sub_pointer]
flag = true
end
# 這輪如果沒有排序就跳出該迴區
break unless flag
sub_pointer += 1
end
pointer += 1
end
return nums
end
puts optimization_bubble_sort([76, 98, 28, 51, 14, 44, 21, 13, 90, 97])