首頁>Club>
適用於怎樣的數列的排序?
6
回覆列表
  • 1 # IT史記研究所

    python中的sorted排序,用的Timsort演算法。

    什麼是Timsort,請看 wiki的解釋:http://en.wikipedia.org/wiki/Timsort

    簡單說以下其原理:

    TimSort 演算法為了減少對升序部分的回溯和對降序部分的效能倒退,將輸入按其升序和降序特點進行了分割槽。排序的輸入的單位不是一個個單獨的數字,而是一個個的塊-分割槽。其中每一個分割槽叫一個run。針對這些 run 序列,每次拿一個 run 出來按規則進行合併。每次合併會將兩個 run合併成一個 run。合併的結果儲存到棧中。合併直到消耗掉所有的 run,這時將棧上剩餘的 run合併到只剩一個 run 為止。這時這個僅剩的 run 便是排好序的結果。

    綜上述過程,Timsort演算法的過程包括

    (0)如何陣列長度小於某個值,直接用二分插入排序演算法

    (1)找到各個run,併入棧

    (2)按規則合併run

    這裡擷取一個不同排序演算法比較的圖示,就明白sorted的威力了

    從時間複雜度來看,Timsort是非常優秀的,但是從空間複雜度來講,需要的開銷在數量大的時候會增大。

    就一般情況,使用sorted足以能夠完成排序的要求,並且是穩定的!

  • 中秋節和大豐收的關聯?
  • 農民住的磚窖洞是不是危房?