[编程题] 归并排序
原理:递归拆分数组到容量为1的两区间,然后两两比较,再合并回来。
单步视频图文教学: https://www.youtube.com/watch?v=4VqmGXwpLqc
function mergeSort(arr: number[]): number[] {
// 递归退出条件
if (arr.length < 2) {
return arr
}
// 拆分数组
const mid = Math.ceil(arr.length / 2)
const a1 = mergeSort(arr.slice(0, mid))
const a2 = mergeSort(arr.slice(mid))
// 合并
return merge(a1, a2)
}
function merge(a1: number[], a2: number[]): number[] {
const arr: number[] = [];
while (a1.length && a2.length) {
if (a1[0] < a2[0]) {
arr.push(a1.shift() as number)
} else {
arr.push(a2.shift() as number)
}
}
if (a1.length) arr.push(...a1)
if (a2.length) arr.push(...a2)
return arr
}
const arr = [133, 73, 327, 736, 731, 885, 605, 530, 959, 268]
console.log(mergeSort(arr)) // [73, 133, 268, 327, 530, 605, 731, 736, 885, 959]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端