def quicksort(sequence):
length = len(sequence)
if length <= 1:
return sequence
else:
pivot = sequence.pop()
items_greater = []
items_lower = []
for item in sequence:
if item > pivot:
items_greater.append(item)
else:
item_lower.append(item)
return quicksort(items_lower) + [pivot] + quicksort(items_greater)
print(quicksort([9,8,7,6,5,4,3,2,1,0]))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
快速排序是所有排序算法中最常用的排序, 因为时间复杂度为nlogn, 核心思想是递归, 先找pivot, 可以是任意的, 我们用最后的为pivot, 先把pivot, pop出来, 然后对剩下的数字和pivot做比较, 比pivot小的放左边, 大的放右边, 剩下的继续递归, 直到全部排完, 结束的条件是, length = 1
程序简写如下:
def quick(l):
length = len(l)
if length <= 1:
return l
pivot = l.pop()
left = []
right = []
for i in l:
if i < pivot:
left.append(i)
else:
right.append(i)
return quick(left) + [pivot] + quick(right)
quick([9,8,7,6,5,4,3,2,1,0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
代码量很小, 但却很少有人想到, 其实比冒泡排序, 选择排序,插入排序等n^2时间复杂度的算法都好。关键是能把递归用的如此简单易懂。