快排
# 快速排序
def quick_sort(alist, first, last):
""""快速排序"""
# 跳出条件 左边指针等于右边指针
if first >= last:
return
# 定义 mid low high 指针
mid_value = alist[first]
low = first
high = last
# 满足 low指针一直在high指针左边 才进行循环
while low < high:
# 搜寻交换条件相符合的 low 与 high
# high 左移 '<--' 条件: high 指向值 满足于 比 mid 大于等于
while low < high and alist[high] >= mid_value:
# high指针(右边的指针)
high -= 1
alist[low] = alist[high]
# low 左移 '-->' 条件: low 指向值满足 比 mid 小
while low < high and alist[low] < mid_value:
low += 1
# low 与 high 进行交换
alist[high] = alist[low]
# 从循环退出时,low == high 已经找到mid_value的位置进行插入
alist[low] = mid_value
# 二分法
# 对low 左边的列表进行快速排序
quick_sort(alist, first, low - 1)
# 对low 右边的列表排序
quick_sort(alist, low + 1, last)
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
n = len(li)
print(li)
print(n)
quick_sort(li, 0, n - 1)
print(li)