分治--常见面试问题
1. 归并排序
分治思想:将数组分成两半分别排序后合并
def merge_sort(arr):# 基本情况:数组长度为0或1时已经有序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 += 1else:result.append(right[j])j += 1# 将剩余元素添加到结果中result.extend(left[i:])result.extend(right[j:])