1. 程式人生 > >Python的快排應有的樣子

Python的快排應有的樣子

for 第一個 歸並排序 復雜 asc acm 一個 CM nic

快排算法

? 簡單來說就是定一個位置然後,然後把比它小的數放左邊,比他大的數放右邊,這顯然是一個遞歸的定義,根據這個思路很容易可以寫出快排的代碼

? 快排是我學ACM路上第一個讓我記住的代碼,印象很深刻,以前學的是Pascal,寫這個要寫好長一串,但是因為和歸並排序比起來還算短的,也就背下來了。好奇的我點開百科看python的快排代碼,就看到了如下代碼:

#quick sort
def quickSort(L, low, high):
    i = low 
    j = high
    if i >= j:
        return L
    key = L[i]
    while
i < j: while i < j and L[j] >= key: j = j-1 L[i] = L[j] while i < j and L[i] <= key: i = i+1 L[j] = L[i] L[i] = key quickSort(L, low, i-1) quickSort(L, j+1
, high) return L

看完上面的代碼後心情復雜,這完全就是我一開始學Pascal的那種代碼,只是換成了python的語法來實現,這怎麽能體現出python的獨特之處呢_(:з」∠)_

這樣的代碼真的是一點都不Pythonic,真正符合Pythonic的快排代碼應該是如下這樣的

def quicksort(array):
    if len(array) < 2:
        return array    #如果數組的長度為0或1當然直接返回了
    else:
        pivot = array[0]
        less = [i for i in
array[1:] if i <= pivot] greater = [i for i in array[1:] if i >pivot] return quicksort(less) + [pivot] + quicksort(greater)

這樣才是優雅的Python啊(′▽`)?

ps.如需轉載,請註明出處

喜歡請支持下~

Python的快排應有的樣子