核心思想

1、随机选择一个元素作为基准(一般选择第一个或最后一个元素),将序列按照基准切分成两份,大于基准的在后面,小于基准的在前面。
2、递归对切分的序列进行步骤1,直到序列不可分

def quick_sort(lst, head, tail):

    if head >= tail:
        return

    p = lst[head]
    start = head
    end = tail

    while start < end:

        while start < end and lst[end] >= p:
            end -= 1
        lst[start] = lst[end]

        while start < end and lst[start] <= p:
            start += 1
        lst[end] = lst[start]

    lst[end] = p

    quick_sort(lst, head, start - 1)
    quick_sort(lst, start + 1, tail)

时间复杂度:
    最优:$O(n\log_2n)$
    最坏:$O(n^2)$
    平均:$O(n\log_2n)$
空间复杂度: $O(n\log_2n)$
稳定性: 不稳定