• 合并排序实现:递归方式和迭代方式


    1、递归方式: 容易出现栈溢出

    //递归实现 合并排序
    function mergeSort_recur(items){
        var len = items.length;
        var mid = Math.floor(len/2);
        var left = items.slice(0,mid);
        var right = items.slice(mid);
        var sortedLeft = mergeSort_recur(left);
        var sortedRight = mergeSort_recur(right);
        return mergeArr(sortedLeft,sortedRight);
    }
    function mergeArr(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,right);
    
    }

    2、迭代方式

    var advArr33=[6,10,1,9,4,8,2,7,3,5,5,33,22];
    console.log('合并排序 非递归实现',mergeSort_Loop(advArr33));
    //非递归实现: 迭代法实现,避免栈溢出
    function mergeSort_Loop(items){
        var len  =items.length;
        if(len==1) { return items;}
        var arr = [];
        for(var i=0;i<len;i++){
            var tmpArr = [items[i]];
            arr.push(tmpArr);
        }
        if(len % 2!=0) arr[len] = []; //如果是奇数,就添加一个空数组
    
        for(var i=arr.length;i>1;i=i/2){
            var k=0;
            for(var j=0;j<i;j=j+2){
                arr[k++] = mergeArr(arr[j],arr[j+1]);
            }
            //清空剩余元素
            arr.splice(k,i-k);
            if(arr.length % 2 !=0) arr[arr.length] = []; //奇数的话,补充一个空数组
            console.log('arr',arr.join(','));
        }
        return arr[0];
    }
  • 相关阅读:
    线段的类
    计算三角形的类
    关于狗的类
    [poj2234] Matches Game
    bzoj[2655] calc
    拉格朗日插值和牛顿插值 菜鸟教程
    NOI模拟赛(3.15) sequence(序列)
    NOI模拟赛(3.13)Hike (远行)
    二分图讲解
    NOI模拟赛(3.8)Problem B
  • 原文地址:https://www.cnblogs.com/lydialee/p/4859348.html
Copyright © 2020-2023  润新知