递归思路:
    image.png

    image.png

    1. //归并排序
    2. let mergeSort = (arr) => {
    3. if (arr.length <= 1) {
    4. return arr;
    5. }
    6. let left = arr.slice(0, Math.floor(arr.length / 2));
    7. let right = arr.slice(Math.floor(arr.length / 2));
    8. return merge(mergeSort(left), mergeSort(right));
    9. };
    10. let merge = (a, b) => {
    11. if (a.length === 0) {
    12. return b;
    13. }
    14. if (b.length === 0) {
    15. return a;
    16. }
    17. return a[0] < b[0]
    18. ? [a[0]].concat(merge(a.slice(1), b))
    19. : [b[0]].concat(merge(a, b.slice(1)));
    20. // if (a[0] < b[0]) {
    21. // return [a[0]].concat(merge(a.slice(1), b));
    22. // } else {
    23. // return [b[0]].concat(merge(a, b.slice(1)));
    24. // }
    25. };