Javascriptでソートアルゴリズムをコーディングしようとしています。疑似コードは私のリンクにあります。これは私の Go Playground リンクです。 http://play.golang.org/p/wQwO6Wvd7b
ご覧のとおり、他の言語でも動作します。(Python、C、C++、Ruby、Go で同じコードを試してみましたが、すべて完璧に動作しました。) Javascript でまったく同じことをしましたが、動作せず、理由がわかりません。前回の投稿で Chris に感謝します: Javascript Sorting。割り当て失敗プロセスのメモリ不足エラー
Javascript のコードが再帰でインデックス制限を超えていることがわかりましたが、Javascript でそれが可能である理由と方法がわかりませんが、他の言語はコーディング時に適切な仕事をします。Javascript と再帰の基本的なものが確実に欠けています。体は私が理解するのを助けることができますか?(宿題ではなく、独学です)私はJavascriptを初めて使用します。
Javascript で並べ替えを行う必要はないと思いますが、何が間違っているのか知りたいです。
以下は、エラーチェックを目的とした私のコードです。
var arr = [-1, 5, 7, 4, 0, 1, -5];
console.log("Unsorted Array:", arr);
console.log("# of elements in array:", arr.length)
function Partition(arr, first_index, last_index) {
console.log("---")
console.log("# of elements in array:", arr.length)
console.log("First index is", first_index);
console.log("Last index is", last_index);
console.log("---")
var x = arr[last_index];
var i = first_index - 1;
for (var j = 0; j < arr.length-1; j++) {
if (j > 100) {
console.log("Looping way too much.");
return;
}
if (arr[j] <= x) {
i += 1;
console.log("Swap index:", i, j);
var temp_1 = arr[i];
arr[i] = arr[j];
arr[j] = temp_1;
}
}
console.log("Swap index:", (i+1), last_index);
var temp_2 = arr[i+1];
arr[i+1] = arr[last_index];
arr[last_index] = temp_2;
return i+1;
}
function QSort(arr, first_index, last_index) {
console.log("QuickSort index:", first_index, last_index);
if (first_index < last_index) {
var mid = Partition(arr, first_index, last_index);
QSort(arr, first_index, mid-1);
QSort(arr, mid+1, last_index);
}
}
QSort(arr, 0, arr.length-1);
console.log("Sorted Array:", arr);
そして、これがループしすぎている理由を以下に推測しています。再帰で何か間違ったことをしていることがわかりました。
配列の要素数: 8
最初のインデックスは 2
最後のインデックスは 6
スワップ インデックス: 2 0
スワップ インデックス: 3 2
スワップ インデックス: 4 3
スワップ インデックス: 5 4
スワップ インデックス: 6 5
スワップ インデックス: 7 6
スワップ インデックス: 8 6
クイックソート インデックス: 2 7
配列の要素数: 9
最初のインデックスは 2
最後のインデックスは 7
と続きます