排序算法-快速排序

快速排序

快速排序(quicksort)算法和归并排序算法属于分治策略的典型应用, 但是二者有较大区别.

归并排序的计算量主要消耗在有序子向量的的归并操作上,子向量的划分几乎不花时间。

快速排序可以在 O ( 1 ) O(1) O(1) 时间内, 由子问题的解直接得到原问题的解, 但是将原问题划分成两个子问题, 需要 O ( n ) O(n) O(n)时间

  • 快速排序能够确保划分出的子任务彼此独立, 但是却不能保证两个子任务的规模大体相当(甚至极不平衡)

    - 快速排序在最坏情况下不能保证 O ( n l o g n ) O(nlogn) O(nlogn)的复杂度

  • 对于随机分布的输入序列,快速排序算法实际的平均运行时间相比同类算法还是要少得多。

1. 轴点 P i v o t Pivot Pivot

对于一个向量区间 [ l o , h i ) [lo, hi) [lo,hi), 如果对于任意的 l o ≤ m i < h i lo \le mi \lt hi lomi<hi, 以元素 s [ m i ] s[mi] s[mi]为界可以划分出前后两个子向量, s [ l o , m i ) s[lo, mi) s[lo,mi) 和 $s[mi, hi)
$
s [ l o , m i ) s[lo, mi) s[lo,mi) 中的元素均不大于 s [ m i ] s[mi] s[mi], 且 s [ m i , h i ) s[mi, hi) s[mi,hi)中的元素均不小于$s[mi]
$
则元素 s [ m i ] s[mi] s[mi] 称作向量 s s s的一个轴点(pivot)

一但轴点左右两个子序列完成了排序,便可在 O ( 1 ) O(1) O(1)时间内完成排序, 得到整个向量的排序结果

2. 快速排序算法:

快速排序算法可以简单地描述为如下形式: (在实际实现时, hi可作为闭区间, 取length-1, 方便实现)

def quick_sort(num_seq
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanqiliang630

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值