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足以能夠完成排序的要求,並且是穩定的!
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足以能夠完成排序的要求,並且是穩定的!