[数据结构学习笔记25] 归并排序(Merge Sort)
归并排序(Merge Sort)也采用了分而治之的思想,它被广泛应用在各类语言的排序实现上。
举例
5,12,4,1,2,8,2,6,10
一分为二
5,12,4,1,2 8,2,6,10
再分
5,12,4 1,2 8,2 6,10
5,12 4 1 2 8 2 6 10
5 12 4 1 2 8 2 6 10
不能再分了,开始排序,开始两两比较
5,12 1,4 2,8 2,6 10
已经排好序的队列,两两合并
1,4,5,12 2,2,6,8 10
1,2,2,4,5,6,8,12 10
1,2,2,4,5,6,8,10,12
结束。
主要思想:1. 先分,分到只有一个元素;2. 合并。
代码(javascript)
function mergeSort(input) { if (input.length < 2) { return input; } let mid = Math.ceil(input.length / 2); let left = mergeSort(input.slice(0, mid)); let right = mergeSort(input.slice(mid)); return merge(left, right); } function merge(left, right) { let result = []; while (left.length > 0 && right.length > 0) { if (left[0] < right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } while (left.length > 0) result.push(left.shift()); while (right.length > 0) result.push(right.shift()); return result; }
归并排序时间复杂度是 O(n log n)。空间复杂度是O(2n)。是稳定排序。
到这里几大排序都过完了,这张表总结一下时间复杂度。
排序算法 | 最好 | 平均 | 最坏 | 空间 |
快速排序 | n log n | n log n | n^2 | log n |
归并排序 | n log n | n log n | n log n | n |
堆排序 | n log n | n log n | n log n | 1 |
冒泡 | n | n^2 | n^2 | 1 |
选择 | n^2 | n^2 | n^2 | 1 |
插入 | n | n^2 | n^2 | 1 |
标签:
数据结构笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验