我正在學習技術面試,並編寫不同種類的快速JavaScript實現。大多數基本排序的隨機數組基準結果是有意義的,但是選擇排序的速度非常快。我不知道爲什麼。爲什麼選擇排序如此之快的JavaScript?
這是我的執行選擇排序的:
Array.prototype.selectionSort = function() {
for (var target = 0; target < this.length - 1; target++) {
var min = target;
for (var j = target + 1; j < this.length - 1; j++) {
if (this[min] > this[j]) {
min = j;
}
}
if (min !== target) {
this.swap(min, target);
}
}
}
這裏是相同的隨機生成的陣列的與10000種元素的結果:
冒泡=> 148ms
插入排序=> 94ms
選擇排序= > 91ms
MergeSort => 45ms
所有類型都使用相同的交換方法。那麼爲什麼選擇排序更快?我唯一的猜測是,Javascript在數組遍歷中真的很快,但在值變化方面很慢,因爲SelectionSort使用的值最小突變,速度更快。
**僅供參考**
這裏是我的冒泡排序實現
Array.prototype.bubbleSort = function() {
for (var i = this.length - 1; i > 1; i--) {
var swapped = false;
for (var j = 0; j < i; j++) {
if (this[j + 1] < this[j]) {
this.swap(j, j+1);
swapped = true;
}
}
if (! swapped) {
return;
}
}
}
這裏是交換實現
Array.prototype.swap = function (index1, index2) {
var val1 = this[index1],
val2 = this[index2];
this[index1] = val2;
this[index2] = val1;
};
你可以看看你的實現是否正確:檢查結果數組是否被排序。 – 11684
那麼你應該可以通過遍歷一次數組來輕鬆驗證你的結果,檢查下一個數字是否大於前一個數字(反之亦然)。 – Daniel
是的結果是正確的。我只是不確定我的實現是否真的是選擇類型......如果是這樣,爲什麼它如此之快 –