天天看點

python 三行代碼實作快速排序

python 三行代碼實作快速排序

最近在看 python cookbook , 裡面的例子很精彩,這裡就幫過來,做個備忘錄

主要利用了行數的遞歸調用和Python的切片特性,解釋一下每行代碼的含義:

  • 第1行: #coding:utf-8 指定utf-8 編碼
  • 第2行:定義函數名和參數
  • 第3行: 判斷清單長度是否小于等于1, 如果小于等于1,直接傳回清單
  • 第4行:傳回遞歸函數拼接的清單,[lt for lt in L[1:] if lt <= L[0]] 清單推導表達式,傳回一個比 L[0] 小的清單,[ge for ge in L[1:] if ge >= L[0]], 傳回一個比L[0] 大的清單, 再加上L[0] 就構成完整的清單

第四行是最關鍵的,傳回三個部分:

  1. 比清單第一個元素小的所有元素清單遞歸調用
  2. 第一個元素
  3. 比清單第一個元素大的所有元素清單遞歸調用
遞歸調用部分,處理過程都是一樣的,用清單第一個參數作為中間值,把清單分為兩部分

最後兩行是測試代碼,生成一個無序清單,列印排序結果。

#coding:utf-8
def qsort(L):
    if len(L) <= 1: return L
    return qsort([lt for lt in L[1:] if lt < L[0]]) + L[0:1]+ \
    qsort([ge for ge in L[1:] if ge >= L[0]])

iList = [3,14,2,12,9,33,99,35]

print qsort(iList)           

複制