Betty985 / algorithm

算法练习
1 stars 0 forks source link

归并排序 #3

Open Betty985 opened 2 years ago

Betty985 commented 2 years ago

思想

Betty985 commented 2 years ago
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortArray = function(nums) {
// 归并排序(二叉树的后序遍历)
function sort(nums,l,h){
    if(l==h){
        return
    }
    let mid=l+Math.floor((h-l)/2)
    sort(nums,l,mid)
    sort(nums,mid+1,h)
    merge(nums,l,mid,h)
}
function merge(nums,l,mid,h){
    let tmp=[]
    for (let i = l; i <= h; i++) {
        tmp[i] = nums[i];
    }
    let i=l,j=mid+1
    for(let p=l;p<=h;p++){
        if(i==mid+1){
            // 左边数组合并完成
            nums[p]=tmp[j++]
        }else if(j==h+1){
            // 右边数组合并完成
            nums[p]=tmp[i++]
        }else if(tmp[i]<=tmp[j]){
            nums[p]=tmp[i++]
        }else{
            nums[p]=tmp[j++]
        }
    }
}
sort(nums,0,nums.length-1)
return nums
};