--- 快速排序 ---
取一个元素 p (第一个元素),使元素 p 归位
列表被 p 分成两部分,左边都比 p 小,右边都比 p 大
递归完成排序
优点:快
缺点:极端情况下排序效率低 (倒序时)
def partition(li, left, right):
temp = li[left]
while left < right:
# 从右边找比 temp 小的数
while left < right and li[right] >= temp:
right -= 1
# 把右边的值 写到左边的空位上
li[left] = li[right]
while left < right and li[left] <= temp:
left += 1
li[right] = li[left]
# 把 temp 归位
li[left] = temp
return left
def quick_sort(li, left, right):
if left < right:
mid = partition(li, left, right)
quick_sort(li, left, mid - 1)
quick_sort(li, mid + 1, right)