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
自底向上归并排序(Bottom-up Mergesort, BUM)
基本思想:从单个元素开始,迭代地合并相邻的有序段
python
1 2 3 4 5 6 7 8 9 10
def bottom_up_merge_sort(arr): n = len(arr) size = 1 while size < n: for start in range(0, n, 2 * size): mid = min(start + size, n) end = min(start + 2 * size, n) merge(arr, start, mid, end) size *= 2