前端面试基础必备JS学习笔记

归并排序

2018-08-25  本文已影响1人  puxiaotaoc

思路:基本思想是分治策略,先进行划分,再进行合并;

function merge(left, right) {
      var result = [];
      while (left.length > 0 && right.length > 0) {
        if (left[0] < right[0]) {
          result.push(left.shift());
        } else {
          result.push(right.shift());
        }
      }
      /* 当左右数组长度不等.将比较完后剩下的数组项链接起来即可 */
      return result.concat(left).concat(right);
    }

    function mergeSort(arr) {
      // 将数组进行划分,直到每项只有一个
      if (arr.length == 1) {
        return arr
      };
      var mid = Math.floor(arr.length / 2);
      var left_arr = arr.slice(0, mid),
        right_arr = arr.slice(mid);
      // 数组先划分到不能再划分时,再进行归并排序
      return merge(mergeSort(left_arr), mergeSort(right_arr));
    }

    var arr = [12, 20, 30, 21, 15, 33, 26, 19, 40, 25];
    console.log(mergeSort(arr));
上一篇 下一篇

猜你喜欢

热点阅读