1. const array = [0, 3, 6, 17, 35, 100, 98, 66, 88, 58, 23, 45, 45, 34, 11];
    2. function mergeSort(array) {
    3. if (array.length < 2) return array;
    4. const midIndex = Math.floor(array.length / 2);
    5. const left = array.slice(0, midIndex);
    6. const right = array.slice(midIndex);
    7. //先全部执行完mergeSort
    8. //变成merge(merge(merge(...), merge(...)), merge(merge(...), merge(mere(...), merge(...))))
    9. return merge(mergeSort(left), mergeSort(right));
    10. }
    11. function merge(left, right) {
    12. const result = [];
    13. let leftIndex = 0,
    14. rightIndex = 0;
    15. while (leftIndex < left.length && rightIndex < right.length) {
    16. //注重理解leftIndex++ rightIndex++
    17. //当一边较小时,将较小的一边先存入result中,并将这一边的游标向前移动一位
    18. if (left[leftIndex] < right[rightIndex]) {
    19. result.push(left[leftIndex++]);
    20. } else {
    21. result.push(right[rightIndex++]);
    22. }
    23. }
    24. //当循环结束时,必定有一边还有剩余元素,且是比较大的元素,按照result+left+right拼接就好
    25. return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
    26. }
    27. console.log(mergeSort(array));