zoukankan      html  css  js  c++  java
  • 归并排序算法及其JS实现

    归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

    可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。阶段可以理解为就是递归拆分子序列的过程,对数列每次都进行切分,直到不能再切分 ,递归深度为log2n。

    再来看看阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤。

    js代码实现

            let dat=[5, 8, 10, 3, 2, 18, 17, 9];
            function merge(left,right){
                var temp=[];
                while(left.length&&right.length){
                    if(left[0]<right[0]){
                        temp.push(left.shift());
                    }else{
                        temp.push(right.shift());
                    }
                }
                //left和right长度不一样时,直接连接剩下的长的部分(本身有序)
                return temp.concat(left,right);
    
            }
            function mergeSort(data){
                if(data.length<=1){
                    return data;
                }
                var mid=Math.floor(data.length/2);
                var left=data.slice(0,mid);
                var right=data.slice(mid);
           
                return  merge(mergeSort(left),mergeSort(right));
            }
            var sortedData=mergeSort(dat);
            console.log(sortedData);
  • 相关阅读:
    UNIX环境高级编程 第9章 进程关系
    UNIX环境高级编程 第8章 进程控制
    UNIX环境高级编程 第7章 进程环境
    最小截断[AHOI2009]
    切糕[HNOI2013]
    餐巾
    happiness[国家集训队2011(吴确)]
    奇怪的道路[JXOI2012]
    王者之剑
    抵制克苏恩[Lydsy2017年4月月赛]
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/9248676.html
Copyright © 2011-2022 走看看