Python 快速與合併排序對照
1. quick_sort
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0] # 基準點
left = [x for x in arr[1:] if x <= pivot] # 小於等於 pivot 的元素
right = [x for x in arr[1:] if x > pivot] # 大於 pivot 的元素
return quick_sort(left) + [pivot] + quick_sort(right)
# 測試
arr = [5, 2, 9, 1, 6, 3]
sorted_arr = quick_sort(arr)
print(sorted_arr)
2. merge_sort
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid]) # 左半邊遞迴排序
right = merge_sort(arr[mid:]) # 右半邊遞迴排序
return merge(left, right)
def merge(left, right):
result = []
i = j = 0
# 將兩個已排序的子陣列合併
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
# 處理剩下的元素
result.extend(left[i:])
result.extend(right[j:])
return result
# 測試
arr = [5, 2, 9, 1, 6, 3]
sorted_arr = merge_sort(arr)
print(sorted_arr)