算法--归并(迭代与递归粗实现)

80 阅读1分钟
//合并有序数组
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(items){
        if(items.length==1){
            return items;
        }
        var half = Math.floor(items.length/2),
            left = items.slice(0,half),
            right = items.slice(half);
        return merge(mergeSort(left),mergeSort(right));
    }
   //迭代实现
    function mergeSort(items){
        var len = items.length;
        if(len==1){
            return items;
        }
        var result = [];
        for(var i=0;i<len;i++){
            result.push([items[i]]);
        }
        //让他能够22匹配
        if(len%2){
            result.push([]);
        }
        var lim = len/2;
        while(lim>=1){
            for(var j=0,k=0;j<lim;j++,k=k+2){
                result[j] = merge(result[k],result[k+1]);
            }
            lim = lim/2;
        }
        return result[0];
    }