Python - 快速排序
手写一遍快速排序,加深记忆。
# 准备被排序的数组
array_to_be_sorted = [int(i) for i in input().split()]
def quick_sort(start, end, arr):
"""快速排序
利用了 list 作为入参时其中的值可以被更更改的性质。
:start: 排序起点
:end: 排序终点
:arr: 需要被排序的序列
"""
if start >= end: # 此时排序结束
return
low, high = start, end # 备份入参
pivot = arr[low] # 起始选择的 轴,注意轴实际上是在下一步循环中最开始被覆盖的小元素的备份(可以这么理解)
while low < high: # 交换轴两边的数据 - 比轴小的放到左边,比轴大的放到右边 - 这样实际上是把 pivot 移到了自己正确的排序位置上
while low < high and arr[high] >= pivot: # 寻找在轴右边且比轴小的元素
high -= 1
arr[low] = arr[high] # 把找到的大元素移到轴的左边,注意此时 high 位置的元素已经没有意义了
while low < high and arr[low] < pivot: # 寻找在轴左边且比轴大的元素
low += 1
arr[high] = arr[low] # 把找到的小元素移到轴的右边,挪入之前 high 腾出来的空位
arr[low] = pivot # 还原轴的值,之前被覆盖了。
quick_sort(start, low - 1, arr) # 轴的位置排好了,排左边的部分
quick_sort(low + 1, end, arr) # 排右边的部分
# 排序
quick_sort(0, len(array_to_be_sorted) - 1, array_to_be_sorted)
print(array_to_be_sorted)