Array.prototype.quickSort = function() {
let self = this;
let len = self.length;
let pivot_pos;
let result = []
if (len < 2) {
return self
}
pivot_pos = self.partition();
let left = self.splice(0, pivot_pos),
right = self.splice(0);
error --> left.quickSort();
error --> right.quickSort();
console.log(left);
console.log(right);
//right_pivot_pos = right.partition();
return this;
}
Array.prototype.partition = function() {
let arr = this;
let pivot_pos = Math.floor((arr.length-1)/2);
let last_small = arr[0]
let i;
//console.log(`before this[0] ${this[0]} and before this[pivot_pos]
${this[pivot_pos]}`);
[arr[pivot_pos], arr[0]] = [arr[0], arr[pivot_pos]];
//console.log(`this[0] ${this[0]} and this[pivot_pos]
${this[pivot_pos]}`);
for (i=1;i<arr.length; i++) {
if(arr[i]<arr[0]) {
//[this[i], this[num]] = [this[num], this[i]];
let tmp = arr[last_small];
arr[last_small] = arr[i];
arr[i] = tmp;
last_small++;
}
}
[arr[0], arr[last_small-1]] = [arr[last_small-1], arr[0]];
return last_small;
}
let sandbox = [1,2,6,5,4,3,7,9];
console.log(sandbox.quickSort());
私はleft.quickSort()を呼び出せません。とright.quickSort(); JavaScriptヒープメモリ不足...このコードを書くための代替手段は何ですか?私はgit上でいくつかのオンラインを参照するが、関数を実行するためのコストを計算するためには異なる。プロトタイプ配列のクイックソート再帰関数を実装しています
私はこのコード行を求めることができますか?私は理解していない[0、0]を参照してください。 self.splice.apply(self、[0、0] .concat(right.quickSort())); –
'[0、0] .concat(right.quickSort())'はソートされた右側のパーティションの先頭に '0、0'を付加します。 '0、0'は' splice'の最初の2つのパラメータで、0の位置にアイテムを追加し、0のアイテムを削除することを意味します。スプライスは配列をアイテムパラメータとして期待しません。 'apply'を使うことでアイテムの配列を' splice'に直接渡すことはできますが、それらを反復して一つずつ追加する必要はありません。 – alirabiee
こんにちは、私はちょうどテストを行い、もし私が[1,10,6,5,4,3,7,9]を使用した場合は、配列がatleast 2秒で形成されるときにはいつもそれが連動しています。 –