数据结构之快速排序

  1. 快速排序: 是一种交换排序方法,采用分治策略。
  2. 基本思想:

    • 从待排序列中随机选择一个元素作为基准元素;
    • 将序列中比基准元素大的放在基准元素的右边,比基准元素小的放在其左边;
    • 对基准元素的左右区间分别重复上述第1步和第2步。
  3. 复杂度

平均时间 最差情况 最好情况 空间复杂度 稳定性
O(nlogn) O(n^2) O(nlogn) O(logn) 不稳定

备注
- 最好的情况是所选的基准元素刚好平分序列;
- 最差的情况是所选的基准元素将序列分为1个,即左边0个,右边n-1个(或者左边n-1,右边0个),此时可近似看作冒泡排序。
- 空间复杂度不是O(1)的原因是递归造成的。
4. 算法实现(从两头向中间扫描的策略,同时交换与基准逆序的元素,用python)
最初的start=0, end = len(arr)

 def quicksort(arr, start, end):
    if start < end:
        i = start
        j = end - 1
        x = arr[start]  # 选第一个元素作为基准元素
        while i<j:
            # 从右向左找第一个小于x的数
            while i<j and arr[j]>x:
                j -= 1
            if i<j:
                arr[i] = arr[j] #找到后进行交换,并改成从左向右找起
                i += 1
            # 从左向右找第一个大于x的数
            while i<j and arr[i]<x:
                i += 1
            if i<j:
                arr[j] = arr[i] # 找到后交换
                j -= 1
        arr[i] = x
        quicksort(arr, start, i)
        quicksort(arr, i+1, end)

猜你喜欢

转载自blog.csdn.net/agaoq/article/details/79432527