簡體   English   中英

Array.prototype.sort暫時復制內容?

[英]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中運行的。

有趣,但並不太令人驚訝。

在這種情況下,它似乎使用了簡單的插入排序算法。

有點像:

  • 獲取項目[1]
  • 將其下方的每個項目移動一個,直到找到較低的項目,然后將其放在此項目上方
  • 獲取項目[2]
  • 將其下方的每個項目移動一個,直到找到較低的項目,然后將其放在此項目上方
  • 獲取項目[3]
  • (續)

在描述冒泡排序算法時,您通常會想象每個元素都在數組中交換,直到找到它的位置。 但是將項目存儲到臨時變量比交換它更有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM