算法练习系列-归并排序

56 阅读1分钟

归并排序是一种分支算法,其思想是将原始数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,知道最后只有一个排序完毕的大数组,是递归的。

function mergeSort(arr) {
    let array= mergeSortRec(arr);
    console.log('array', array);
}

function mergeSortRec(arr){
    let length = arr.length;
    if (length === 1) return arr;
    let mid = Math.floor(length / 2);
    let left = arr.slice(0, mid);
    let right = arr.slice(mid, length);
    return merge(mergeSortRec(left), mergeSortRec(right));
}

function merge(left, right) {
    let result = [];
    let il = 0, ir = 0;
    while(il < left.length && ir < right.length) {
        if (left[il] < right[ir]) {
            result.push(left[il++]);
        } else {
            result.push(right[ir++]);
        }
    }

    while(il < left.length) {
        result.push(left[il++]);
    }

    while(ir < right.length) {
        result.push(right[ir++]);
    }

    return result;
}

mergeSort([8,7,7,8,9,3,2,1]);