5.归并排序

//归并排序:分而治之;先分治,分到只有一个元素,再合并

function mergeSort(arr){
    if (arr.length===1){
       return arr
    }
    let preArr=arr.slice(0,Math.floor(arr.length/2))
    let lastArr=arr.slice(Math.floor(arr.length/2),arr.length)

    let res1=mergeSort(preArr)//前半部分已经排好序
    let res2=mergeSort(lastArr)//后半部分已经排好序

    //合并数组
    let res=[]
    let i=0;//res1指针
    let j=0;//res2指针

    while (res1[i]&&res2[j]){
        if (res1[i]<=res2[j]){
            res.push(res1[i])
            i++
        }else {
            res.push(res2[j])
            j++
        }
    }

    //较长数组最后半截合并
    if (res[i]){
        res=res.concat(res1.slice(i,res1.length))
    }else {
        res=res.concat(res2.slice(j,res2.length))
    }

    return res

}


console.log(mergeSort([2,5,3,8,0,2,6,-1]));
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值