2017-10-03 7 views
0

ソートをリフレッシュするための練習問題を実行していましたが、この問題を遭遇しましたか?コンソールロギングクイックソートはソートを削減します

私は配列をクイックソートしていますが、console.log(quicksort(inputArray).toString());の場合、残りの数は終了しません。

var pivot = inputArray.pop(); 

あなたは、その最後の要素を削除することによって元の配列を変更している:あなたは次の手順を実行するとここで

はコードhttps://jsfiddle.net/qLyt1yfv/

function quicksort(inputArray) { 
 
    if (inputArray.length <= 1) { 
 
    return inputArray; 
 
    } else { 
 

 
    var left_subarray = []; 
 
    var right_subarray = []; 
 
    var newArray = []; 
 
    var pivot = inputArray.pop(); 
 
    var length = inputArray.length; 
 

 
    for (var i = 0; i < length; i++) { 
 
     if (inputArray[i] <= pivot) { 
 
     left_subarray.push(inputArray[i]); 
 
     } else { 
 
     right_subarray.push(inputArray[i]); 
 
     } 
 
    } 
 

 
    return newArray.concat(quicksort(left_subarray), pivot, quicksort(right_subarray)); 
 
    } 
 
} 
 

 
var input = [51, 42, 96, 83, 37, 5, 24]; 
 
var resultArray = quicksort(input); 
 

 
console.log(quicksort(input).toString()); 
 
console.log("Result Array: " + resultArray); 
 

 
document.getElementById('result').innerHTML = resultArray.toString();
<h1 id="result">Quicksort: </h1>

+0

を渡します。外部リンクに依存しないようにすることがベストプラクティスと考えられています。ユーザーにとっても簡単なので、結果を得る可能性が高くなります。 – SherylHohman

答えて

0

のJSFiddleです。

あなたは、ソートを行う前に、または結果を返す前に戻って、配列に要素を押すことで元の配列のコピーを行うことのいずれかによって、この問題を解決することができます

inputArray.push(pivot); 
+0

if文がポップする前にそれをキャッチしないのですか?そして、なぜコンソールログだけが切れるのかわかりません。 –

+0

しかし、元の 'inputArray'ではなく、他の配列' left_subarray'にプッシュバックしています。最初に 'quicksort'を呼び出すと、元の配列が変更され、再度呼び出されましたが、今回は結果がコンソールに表示され、1つの要素が欠けていたため、コンソールログに表示されませんでした。 'quicksort'への最初の呼び出しの後に' console.log( "test:" + input ";)を置くことで確認できます。そうすれば、関数は常に元の入力から最後の要素を削除します。 –

+0

ああ!私はそれを今見て、私はこれを削除します。 –

0

あなたはクイックソート関数にinputArrayを渡し、あなたが入力配列を渡すべきではありませんinputArray.popことによってそれの要素を削除する()

、ちょうど私がSOのコードスニペットにJSFiddleからあなたのコードをコピーし、この配列のコピー

関連する問題