zoukankan      html  css  js  c++  java
  • javascript归并排序

    基本思想:先进行划分,然后再进行合并。

    例如:要对数组进行归并排序步骤

    1. 先将C划分为两个数组A和B(即把数组C从中间分开)
    2. 再分别对数组A、B重复步骤1的操作,逐步划分,直到不能再划分为止(每个子数组只剩下一个元素),这样,划分的过程就结束了。
    如:              [12 20 30 21 15 33 26 19 40 25]
    划分为:  [12 20 30 21 15]                [33 26 19 40 25]
               [12 20]      [30 21 15]       [33 26]       [19 40 25]
             [12]  [20]   [30]  [21 15]     [33]  [26]    [19]    [40 25]
             [12]  [20]   [30] [21] [15]    [33]  [26]    [19]   [40] [25]
    3. 然后从下层往上层不断合并数组,每一层合并相邻的两个子数组,合并的过程是每次从待合并的两个子数组中选取一个最小的元素,然后把这个元素放到合并后的数组中,不断重复直到把两个子数组的元素都放到合并后的数组为止。

    4. 依次类推,直到合并到最上层结束,这时数据的排序已经完成了。

    function merge(left,right){
        var tmp=[];
        while(left.length && right.length){
            if(left[0]<right[0]){
                tmp.push(left.shift());
            }
            else{
                tmp.push(right.shift());
            }
        }
        return tmp.concat(left,right);
    }
    function mergeSort(arr){
        if(arr.length==1){
            return arr;
        }
        var mid=Math.floor(arr.length/2);
        var left=arr.slice(0,mid);
        var right=arr.slice(mid);
        return merge(mergeSort(left),mergeSort(right));
    }
    console.log(mergeSort([2,3,1,0,9]));
  • 相关阅读:
    506Relative Ranks(LeetCode)
    计算二进制中1的个数
    vector<vector<int>> 简单知识介绍
    167. Two Sum II
    561. Array Partition I(LeetCode)
    sizeof 用法部分总结
    530. Minimum Absolute Difference in BST(LeetCode)
    JS计算两个日期之间的天数
    路演会上会登记结论的委员信息页面
    eclipse安装SVN插件
  • 原文地址:https://www.cnblogs.com/PeriHe/p/8036086.html
Copyright © 2011-2022 走看看