返回顶部

算法 - 快速排序

原理:

从数列中挑出一个元素,称为 "基准"(pivot), 重新排序数列,

  1. 所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
  2. 在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

python实现:

# 完成一轮交换
def sub_sort(lst, low, high):
    # 选定基准
    x = lst[low]

    # low 向后,high 向前
    while low < high:
        # 后面的数往前走
        while lst[high] >= x and high > low:
            high -= 1
        # 遇到小于x的数,向前甩
        lst[low] = lst[high]
        # 前面的数往后走
        while lst[low] < x and low < high:
            low += 1
        # 遇到大于x的数,向后甩
        lst[high] = lst[low]
    # 循环结束,将基准数放置在当前low的位置
    lst[low] = x
    # 返回当前low的索引值
    return low

def quick(lst, low, high):
    # low 表示列表第一个元素索引,high表示最后一个元素索引
    if low < high:
        key = sub_sort(lst, low, high)
        quick(lst, low, key-1)
        quick(lst, key+1, high)

lst = [9,1,8,3,4,5,6,7,2]
quick(lst, 0, len(lst)-1)
print(lst)

# [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

posted @ 2021-01-26 23:53  Be-myself  阅读(91)  评论(0编辑  收藏  举报
levels of contents 点击查看具体代码内容