合并递归

    1. function mergeSort(array) {
    2. if (array.length <= 1) return array
    3. let mid = Math.floor(array.length / 2)
    4. let left = array.slice(0, mid)
    5. let right = array.slice(mid)
    6. return merge(mergeSort(left), mergeSort(right))
    7. }
    8. function merge(a, b) {
    9. let array
    10. if (a.length === 0) return b;
    11. if (b.length === 0) return a;
    12. if (a[0] < b[0]) {
    13. array = [a[0]].concat(merge(a.slice(1), b))
    14. } else {
    15. array = [b[0]].concat(merge(a, b.slice(1)))
    16. }
    17. return array
    18. }

    合并非递归

        function mergeSort(array) {
            if (array.length <= 1) return array
            let mid = Math.floor(array.length / 2)
            let left = array.slice(0, mid)
            let right = array.slice(mid)
            return merge(mergeSort(left), mergeSort(right))
        }
    
        function merge(a, b) {
            let i = 0,
                j = 0,
                k = 0,
                array = [];
            while (i < a.length && j < b.length) {
                if (a[i] < b[j]) {
                    array[k] = a[i];
                    k++;
                    i++;
                } else {
                    array[k] = b[j];
                    k++;
                    j++;
                }
            }
            if (i >= a.length) {
                array = array.concat(b.slice(j));
            } else if (j >= b.length) {
                array = array.concat(a.slice(i));
            }
            return array
        }