![](/img/trans.png)
[英]Firefox Array.prototype.sort - is this behaviour correct?
[英]Array.prototype.sort Temporarily Duplicating Content?
我最近想通過一些人了解Array.prototype.sort
如何使用自定義方法在任何給定時間比較兩個值,並決定是應該交換它們還是單獨使用它們。 我決定在每次比較期間記錄數組,以便可以看到之前比較的結果。 當我記錄數組時,我注意到在某些時刻陣列的狀態有些奇怪。
假設如下:
var num = [ 2, 1, 8, 5, 3 ];
num.sort( comparator );
function comparator ( a, b ) {
console.log( num ); // Current state of num
return a - b; // Order values numerically
}
這是輸出:
[ 2, 1, 8, 5, 3 ] // Comparing 2 and 1
[ 1, 2, 8, 5, 3 ] // Comparing 2 and 8
[ 1, 2, 8, 5, 3 ] // Comparing 8 and 5
[ 1, 2, 8, 8, 3 ] // Comparing 2 and 5
[ 1, 2, 5, 8, 3 ] // Comparing 8 and 3
[ 1, 2, 5, 8, 8 ] // Comparing 5 and 3
[ 1, 2, 5, 5, 8 ] // Comparing 2 and 3
陣列排序正確( [ 1, 2, 3, 5, 8 ]
)但我仍然在集合本身的一些傳球上摸不着頭腦。
8如何在迭代4中出現兩次,暫時替換為5。 再次,8出現兩次兩次迭代,之后暫時替換3次。 最后,5出現兩次,在最后一次迭代中暫時替換3。
請注意,上面的代碼是在Chrome中運行的。
有趣,但並不太令人驚訝。
在這種情況下,它似乎使用了簡單的插入排序算法。
有點像:
在描述冒泡排序算法時,您通常會想象每個元素都在數組中交換,直到找到它的位置。 但是將項目存儲到臨時變量比交換它更有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.