国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js 3種歸并操作的實例代碼

2024-05-06 15:53:51
字體:
來源:轉載
供稿:網友
這篇文章介紹了js 3種歸并操作的實例代碼,有需要的朋友可以參考一下

第一種:

復制代碼 代碼如下:


/**良哥的*/
function merge(a, b) {
    var aLen = a.length,
        bLen = b.length,
        maxLen = Math.max(aLen, bLen),
        sumLen = aLen + bLen,
        result = [],
        ap = 0,
        bp = 0;

     while (result.length < sumLen) {
        if (ap < aLen && bp < bLen) {
            if(a[ap] > b[bp]){
                result.push(b[bp++]);
            } else {
                result.push(a[ap++]);
            }
        } else if (!(ap < aLen)){
            while(bp < bLen){
                result.push(b[bp++]);
            }
        } else if (!(bp < bLen)){
            while(ap < aLen){
                result.push(a[ap++]);
            }
        }
    }
    return result;
}

第二種:

復制代碼 代碼如下:


/**魯軍*/
function merge(arr1, arr2){

    var i = 0;
    var j = 0;
    var c = 0;
    var k;
    var len1 = arr1.length;
    var len2 = arr2.length;
    var arr = [];
    for(;i<len1 && j<len2;){
        if( arr1[i] > arr2[j]  ){
            arr.push( arr2[j] );
            j++;
        }else{
            arr.push( arr1[i] );
            i++;
        }
        //if(i==len1 || j==len2){
        //    break;
        //}
    }

    if(i==len1){
        //arr = arr.concat(arr2.slice(j));

        for(k=j; k<len2; k++){
            arr.push( arr2[k] );
        }
    }

    if(j==len2){
        //arr = arr.concat(arr1.slice(i))
        for(k=i; k<len1; k++){
            arr.push( arr1[k] );
        }

    }

    return arr;
}

第三種:

復制代碼 代碼如下:


/*金銳的*/
function merge(a,b){
    var x = 0;
    var l = 0;
    var list = [];
    var aLen = a.length;
    var bLen = b.length;

    for(var i = 0; i < bLen; i++){
        for(var j = x; j < aLen; j++){
            if(b[i] < a[j]){
                list.push(b[i]);
                l = i;
                break;
            }else{               
                list.push(a[j]);
                x++;
            }
        }    
    }           

    if(x == a.length){
        for(var y = l; y < bLen; y++){
            list.push(b[y]);
        }
    }else{
        for(var z = x; z < aLen; z++){
            list.push(a[z]);
        }
    }

    return list;
}

經過測試2個有序20W長度的數組歸并耗時都在15毫秒以下。

以下有幾條經驗(在大量操作的時候才能體現,平時不需要做這樣的優化。代碼可讀性還是第一原則)

1:數組的concat方法比直接for循環push要慢。

2:for循環比while循環快。

3:var a = b || 3; //這種操作很消耗時間

4: break,continue 在已確定不需要再循環時很耗時。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 乌兰浩特市| 怀宁县| 古蔺县| 崇文区| 万宁市| 西贡区| 威信县| 康定县| 荆州市| 阜康市| 福安市| 咸丰县| 巫溪县| 桂东县| 宜昌市| 晋城| 若羌县| 家居| 乐山市| 奉新县| 新田县| 崇左市| 正镶白旗| 芷江| 吉水县| 夏河县| 和林格尔县| 惠水县| 图木舒克市| 瑞昌市| 金湖县| 徐州市| 交口县| 鄂托克前旗| 盈江县| 亚东县| 甘泉县| 朝阳市| 芦溪县| 东山县| 五莲县|