数据结构之快速排序

  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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值