python2.7的sort函數默認採用什麼排序演算法,適用於怎樣的數列的排序?

剛學python,想請教一下,默認的函數會不會影響運行效率。


python中的sorted排序,真的是高大上,用的Timsort演算法。

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

另外,國內有一個文檔,適當翻譯:Timsort原理介紹 - Data Analytics - 博客頻道 - CSDN.NET,

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

從時間複雜度來看,Timsort是威武的。

從空間複雜度來講,需要的開銷在數量大的時候會增大。

綜上,可以看出,就一般情況,使用sorted足以能夠完成排序的要求,並且是穩定的。

當然,python中也有其它一些排序模塊,都可以直接拿過來使用。

FROM: qiwsir/algorithm


引用自http://zhidao.baidu.com/link?url=wZD_oY7zrVdYLP6uvO1qUaiBRYvidsbw2e3xFYJf_sq-8lckxoQh7m5RJmTV6ZTveb_jHA_AzNqT_I8dR1Wnk_

@曹曉山

最近也在學習python,推薦《Python基礎教程》,雖然我只看了這本書……其中第二版40頁也詳細說明了高級排序的內容,使用的就是sort函數,當然下面的回答也是非常全面的。剛剛發現這是我的知乎首答,真是社會敗類啊,默默在知乎上混了好幾年……

———————————————————————————————————————————

Python中的sort()函數是序列的內部函數,函數原型:

L.sort(cmp=None, key=None, reverse=False)

函數作用:它是把L原地排序,也就是使用後並不是返回一個有序的序列副本,而是把當前序列變得有序。

Python中sort()參數說明:

(1) cmp參數

cmp接受一個函數,拿整形舉例,形式為:

def f(a,b):
return a-b

如果排序的元素是其他類型的,如果a邏輯小於b,函數返回負數;a邏輯等於b,函數返回0;a邏輯大於b,函數返回正數就行了。

(2) key參數

key也是接受一個函數,不同的是,這個函數只接受一個元素,形式如下:

def f(a):
return len(a)

key接受的函數返回值,表示此元素的權值,sort將按照權值大小進行排序

(3) reverse參數

接受False 或者True 表示是否逆序

Python中sort()函數舉例:

(1)按照元素長度排序

L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f(x):
return len(x)
sort(key=f)
print L
//輸出:
//[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]

(2)按照每個字典元素裡面key為1的元素的值排序

L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f2(a,b):
return a[1]-b[1]
L.sort(cmp=f2)
print L
//輸出:
//[{1: 1, 2: 4, 5: 6}, {1: 3, 6: 3}, {1: 5, 3: 4}, {1: 9}]


推薦閱讀:

爬蟲入門到精通-網頁的解析(xpath)
*吧上有海外留學生問全部用遞歸求第N個質數,不能用循環
python Web 運維 爬蟲.....一條龍學習視頻教程
《Django By Example》第一章 中文翻譯
10min手寫(b六):b面試題解析丨Python實現多連接下載器

TAG:Python | Python庫 | Python入門 | Python2x |