[编程题] 归并排序

原理:递归拆分数组到容量为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] 
posted @   toddforsure  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示