快速排序


平均时间复杂度: nlogn

最为常用的排序算法

def quick_sort(data, start, end):
    # 快排原地排序,直接对原list排序,没有返回值
    if start>=end:
        return
    # 开始结束索引不能破坏
    left, right = start, end
    mid = start + (end-start)//2
    # 避免最坏情况出现
    pivot = data[mid]
    while left <= right:
        while left <= right and data[left]<pivot:
            left += 1
        while left <= right and data[right]>pivot:
            right -= 1
        # 两头找到均不满足条件的数,需要互换区间
        if left <= right:
            data[left], data[right] = data[right], data[left]
            left += 1
            right -= 1
    # 小范围内再排序
    quick_sort(data, start, right)
    quick_sort(data, left, end)
nums = [33,2,11,8,7,12]
quick_sort(nums, 0, len(nums)-1)
nums