编辑代码

// end为索引+1 
function mergeSort(arr, start, end) {

    const len = end - start

    if (len === 1) {
        return true
    }
    const mid = start + (len >> 1)

    mergeSort(arr, start, mid) // 先排序左边
    mergeSort(arr, mid, end) // 排序右边

    return merge(arr, start, mid, end) //合并两边
}

function merge(arr, start, mid, end) {
    // 分配临时数组排序结果

    let temp = arr.slice(start, end)

    let i = start
    let j = mid
    let tempIndex = 0

    while (i < mid && j < end) {
        if (arr[i] > arr[j]) {

            temp[tempIndex] = arr[j]
            j++
        } else {
            temp[tempIndex] = arr[i]
            i++
        }
        tempIndex++
    }

    // 看合并后,有无遗漏
    while (i < mid) {
        temp[tempIndex] = arr[i]
        tempIndex++
        i++
    }

    while (j < end) {
        temp[tempIndex] = arr[j]
        tempIndex++
        j++
    }

    // console.log(start, mid, end)
    console.log("排序后的temp", temp)

    // // 将临时数组的数据拷贝回去
    for (let k = start, tempI = 0; tempI < arr.length && k < end; tempI++ , k++) {
        arr[k] = temp[tempI]
    }
    return arr
}

const arr = [11, 8, 2, 4,5,6,7,14]

console.log(mergeSort(arr, 0, arr.length))