← 返回内容列表

归并排序递归树:分与合一眼看懂

分享本文
归并排序递归树:分与合一眼看懂

用递归树拆解归并排序:每层代价恒为 n,叠 log₂n 层得 Θ(n log n)。

归并排序的“分”把数组对半切到单元素(天然有序),“合”再自底向上合并。下面用递归树看清每一层的代价。

归并排序:分——对半切到单元素;合——合并有序子数组原数组(未排序)52461328左半右半524613285246132852461328单元素:天然有序合:自底向上合并有序子数组12234568最终有序;每层合并 O(n),共 log₂n 层 → 总 O(n log n)

图:归并排序的“分—合”递归结构(以 [5,2,4,6,1,3,2,8] 为例)

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    return merge(merge_sort(arr[:mid]), merge_sort(arr[mid:]))

每层子问题规模之和为 n,合并总代价 Θ(n);树高 log₂n,故总代价 Θ(n log n)。这与主定理结论一致。

相关推荐:递推式与主定理 · 主定理到底在算什么

评论 (0)

正文划词可点「问萝卜特」——自动发评论并由 AI 回复

加载评论中…

归并排序递归树:分与合一眼看懂 - 用可视化演示,真正搞懂 AI 与编程 | 必学必会