少しテストをしたところ、array.sort(function(a, b) { return a - b; });
はJavaScriptのarray.sort();
よりずっと高速です。JavaScriptの2番目のパラメータでソートするのが速い
結果はかなり衝撃的で、IE9では約1.7倍、FF7では約1.6倍、Chromeでは約6.7倍の速さでした。
また、自分でquicksortをJSで実装すると、上記の両方の方法よりも速いことがわかりました。 (2つの異なる実装で、1つはパラメータとして比較関数を受け取り、もう1つは高速です)。
合理的な説明はありますか?
EDIT:私の実装:
ませんコンペアラー:比較演算子で
function quickSort(array, from, to) {
if(typeof from === 'undefined') {
from = 0;
to = array.length - 1;
}
else if(typeof to === 'undefined') {
to = array.length - 1;
}
if(to - from < 1) {
return;
}
var i = from, pivot = to, t;
while(i < pivot) {
if(array[i] > array[pivot]) {
t = array[i];
array[i] = array[pivot - 1];
array[pivot - 1] = array[pivot];
array[pivot] = t;
pivot--;
}
else {
i++;
}
}
quickSort(array, from, pivot - 1);
quickSort(array, pivot + 1, to);
}
:フェリックス・キングなど
まず、:
function quickSortFunc(array, sortfunc, from, to) {
if(typeof from === 'undefined') {
from = 0;
to = array.length - 1;
}
else if(typeof to === 'undefined') {
to = array.length - 1;
}
if(to - from < 1) {
return;
}
var i = from, pivot = to, t;
while(i < pivot) {
if(sortfunc(array[i], array[pivot]) > 0) {
t = array[i];
array[i] = array[pivot - 1];
array[pivot - 1] = array[pivot];
array[pivot] = t;
pivot--;
}
else {
i++;
}
}
quickSortFunc(array, sortfunc, from, pivot - 1);
quickSortFunc(array, sortfunc, pivot + 1, to);
}
それはソート機能が平均値から実行されている可能性です。あなたが使ったアレイの大きさはどれくらいですか? – Matt
"ノーマル"ソートは要素の文字列表現に作用します。それは可能性のあるオーバーヘッドかもしれません。 –
Matt、私は100,1000,10000、および100000要素の配列でそれをテストしました。比較演算子と私の実装は比較子を持つネイティブ実装よりも速かった理由 フェリックスは、私もその2については、それはまだ説明していません。 –