leetcode-归并排序
归并排序
归并排序就是先把左半边数组排好序,再把右半边数组排好序,然后把两半数组合并。

算法框架
// 定义:排序 nums[lo..hi] void sort(int[] nums, int lo, int hi) { if (lo == hi) { return; } int mid = (lo + hi) / 2; // 利用定义,排序 nums[lo..mid] sort(nums, lo, mid); // 利用定义,排序 nums[mid+1..hi] sort(nums, mid + 1, hi); /****** 后序位置 ******/ // 此时两部分子数组已经被排好序 // 合并两个有序数组,使 nums[lo..hi] 有序 merge(nums, lo, mid, hi); /*********************/ } // 将有序数组 nums[lo..mid] 和有序数组 nums[mid+1..hi] // 合并为有序数组 nums[lo..hi] void merge(int[] nums, int lo, int mid, int hi);
归并排序就是二叉树的后序遍历
代码实现
class Solution: def sort(self, nums: List[int]) -> List[int]: def merge_sort(l, r): # 终止条件 if l >= r: return 0 # 递归划分 m = (l + r) // 2 merge_sort(l, m) merge_sort(m + 1, r) # 合并阶段 i, j = l, m + 1 # 先将nums数组复制到临时数组tmp中 tmp[l:r + 1] = nums[l:r + 1] for k in range(l, r + 1): # 左边数组已全部合并 if i == m + 1: nums[k] = tmp[j] j += 1 # 右边数组已全部合并 elif j == r + 1: nums[k] = tmp[i] i += 1 elif tmp[i] <= tmp[j]: nums[k] = tmp[i] i += 1 else: nums[k] = tmp[j] j += 1 tmp = [0] * len(nums) merge_sort(0, len(nums) - 1) return nums
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异