归并排序
归并排序采用分治策略实现稳定排序,其核心思想是将序列递归分解后进行有序合并。
def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])result = []i = j = 0while i < len(left) and j < len(right):if left[i] < right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result
时间复杂度分析
设序列长度为 n n n,递归树深度为 log n \log n logn,每层合并操作耗时 O ( n ) O(n) O(n)。递推公式为:
T ( n ) = 2 T ( n 2 ) + O ( n ) T(n) = 2T(\frac{n}{2}) + O(n) T(n)=2T(2n)+O(n)
根据主定理可得时间复杂度为 O ( n log n ) O(n \log n) O(nlogn)。当处理大规模数据时,这种对数增长特性使算法效率显著优于 O ( n 2 ) O(n^2) O(n2)的简单排序算法。
该算法的空间复杂度为 O ( n ) O(n) O(n),主要来源于合并过程中创建的临时数组。实际应用中可通过原地归并等优化策略降低空间消耗。