12 快速排序
# encoding: utf=8
def quick_sort(a, start, end):
# 快速排序: 将第一个值作为中间值, 将比它小的数都放在左边, 比它大的数都放在右边
# 递归退出条件
if start >= end:
return
# 基准元素
mid_value = a[start]
# 游标 low high
low = start
high = end
while low < high:
# 如果low < high, 且high指向元素大于等于基准元素, 则high往左移
while low < high and a[high] >= mid_value:
high -= 1
# a[high] < mid_value 或 low == high
a[low] = a[high]
# 如果low < high, 且low指向元素小于基准元素, 则low往右移
while low < high and a[low] < mid_value:
low += 1
# a[low] >= mid_value 或 low == high
a[high] = a[low]
# 退出循环 low == high
a[low] = mid_value
# 对左边子序列进行快速排序
quick_sort(a, start, low - 1)
# 对右边子序列进行快速排序
quick_sort(a, low + 1, end)