您可能會考慮更容易實現快速排序。例如,
my_list = [52,8,45,43,6,56,76,36,54,12,34,98,41,30]
def quicksort(arr):
high = []
low = []
pivot_list = []
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
for i in arr:
if i < pivot:
low.append(i)
elif i > pivot:
high.append(i)
else:
pivot_list.append(i)
high = quicksort(high)
low = quicksort(low)
return low + pivot_list + high
print quicksort(my_list)
[6, 8, 12, 30, 34, 36, 41, 43, 45, 52, 54, 56, 76, 98]
這個相當簡單的實現很容易解釋。 您正在根據主鍵的任意選擇對列表進行分區。在這種情況下,arr[0] = 52
。然後你遍歷整個列表,如果元素大於pivot(52),你把它放到'high'分區,如果它小於52,你就把它放到'low'分區。在通過一個運行後這一點(我們運行high = quicksort(high)
之前),我們有
low = [8, 45, 43, 6, 36, 12, 34, 41, 30]
high = [56, 76, 54, 98]
pivot_list = [52]
然後,我們對「低」和「高」的分區上運行此快速排序功能。例如,對於高分區,pivot = arr[0] = 56
。我們遍歷高分區,如果元素小於主分區(56),我們將它放在一個新的低分區組中,該分區組是高分區的子組。如果元素大於56,那麼我們把它放在新的高分區中,高分區是高分區的子組。你可以把它看作是從一個我們想要排序的列表開始,然後分成一個高分區和一個低分區,然後每個分區分支到他們自己的高分區和低分區。這就是遞歸進來的地方