0

私は一日中試しましたが、なぜそれが機能していないのかを見つけることができないようです. 問題は私の JavaScript 言語のスキルだと思います。パラメータの受け渡しに関するいくつかの概念が欠けている可能性があります。エラーの場所を教えてください。

これは、1 年前に C# で書いた別の実装に基づく私の実装です

コードは次のとおりです(Chromeコンソールで直接試すことができます。コピーして貼り付けるだけで「機能」します):

function merge(A, p, q, r){
    var n1 = q - p + 1;
    var n2 = r - q;

    var i = 0;
    var j = 0;

    var L = [];
    while (i < n1){
        L.push(A[p + i++]);
    }

    var R = [];
    while(j < n2){
        R.push(A[q + j++ + 1]);
    }

    L.push(Number.MAX_VALUE);
    R.push(Number.MAX_VALUE);

    i = 0; 
    j = 0; 

    var k = p;
    while(k <= r){
        if(L[i] <= R[i]){
            A[k] = L[i];
            i = i + 1;
        }else{
            A[k] = R[j];
            j = j + 1;
        }

        k = k + 1;
    }
}

function mergeSort(A, p, r){
    console.log(A);

    if(p < r){
        var q = Math.floor((p + r) / 2);

        mergeSort(A, p, q); 
        mergeSort(A, q + 1, r);
        merge(A, p, q, r);
    }
}

function testMergeSort(array){
    var p = 0;
    var r = array.length - 1;

    console.log("BEFORE: " + array);

    mergeSort(array, p, r);

    console.log("AFTER: " + array);
    console.log("---------------------------------");
}

testMergeSort([5, 2, 4, 7, 1, 3, 2, 6]);
4

1 に答える 1

8

単純なタイプミス:

if(L[i] <= R[i]){

する必要があります

if(L[i] <= R[j]){
于 2012-07-24T00:35:58.970 に答える