相关文章
排序算法——快速排序
2025-01-03 00:45

快速排序是一种基于分治策略的排序算法,运行高效,应用广泛。

快速排序的核心就是“哨兵划分”,其目的是:选择数组中的某个元素作为“基准数”,其左边均为小于基准数的数,其右边均为大于基准数的数。

哨兵划分完成后,原数组被划分成三部分:左子数组、基准数、右子数组,且满足“左子数组任意元素 ≤ 基准数 ≤ 右子数组任意元素”。因此,我们接下来只需对这两个子数组进行排序。之后进行了两次复杂度优化,一次是对基准数的选取,优化时间复杂度,一次是对递归数组的选取,优化空间复杂度。

目录

一.算法流程

二.算法特性

三.快速排序为什么快

四.基准数优化

五.尾递归优化


快速排序的整体流程如下

  1. 首先,对原数组执行一次“哨兵划分”,得到未排序的左子数组和右子数组。
  2. 然后,对左子数组和右子数组分别递归执行“哨兵划分”。
  3. 持续递归,直至子数组长度为 1 时终止,从而完成整个数组的排序。
 

在这代码里边有一点需要注意

 

先从右往左找比基准数小的数,再从左往右找比基准数大的数,为什么呢

 

所以说应该先让右指针找最小值,最后左指针只能顺着右指针,二者重合的时候必定是满足比基准数小的心意的,此时才能将小值放在基准数左边,大值放在基准数右边

  • 时间复杂度为 O(nlog⁡n)、非自适应排序:在平均情况下,哨兵划分的递归层数为 log⁡n ,每层中的总循环数为 n ,总体使用 O(nlog⁡n) 时间。在最差情况下,每轮哨兵划分操作都将长度为 n 的数组划分为长度为 0 和 n−1 的两个子数组,此时递归层数达到 n ,每层中的循环数为 n ,总体使用 O(n2) 时间。
  • 空间复杂度为 O(n)、原地排序:在输入数组完全倒序的情况下,达到最差递归深度 n ,使用 O(n) 栈帧空间。排序操作是在原数组上进行的,未借助额外数组。
  • 非稳定排序:在哨兵划分的最后一步,基准数可能会被交换至相等元素的右侧。

从名称上就能看出,快速排序在效率方面应该具有一定的优势。尽管快速排序的平均时间复杂度与“归并排序”和“堆排序”相同,但通常快速排序的效率更高,主要有以下原因。

  • 出现最差情况的概率很低:虽然快速排序的最差时间复杂度为 O(n2) ,没有归并排序稳定,但在绝大多数情况下,快速排序能在 O(nlog⁡n) 的时间复杂度下运行。
  • 缓存使用效率高:在执行哨兵划分操作时,系统可将整个子数组加载到缓存,因此访问元素的效率较高。而像“堆排序”这类算法需要跳跃式访问元素,从而缺乏这一特性。
  • 复杂度的常数系数小:在上述三种算法中,快速排序的比较、赋值、交换等操作的总数量最少。这与“插入排序”比“冒泡排序”更快的原因类似。

快速排序在某些输入下的时间效率可能降低。举一个极端例子,假设输入数组是完全倒序的,由于我们选择最左端元素作为基准数,那么在哨兵划分完成后,基准数被交换至数组最右端,导致左子数组长度为 n−1、右子数组长度为 0 。如此递归下去,每轮哨兵划分后都有一个子数组的长度为 0 ,分治策略失效,快速排序退化为“冒泡排序”的近似形式。

为了尽量避免这种情况发生我们可以优化哨兵划分中的基准数的选取策略。例如,我们可以随机选取一个元素作为基准数。然而,如果运气不佳,每次都选到不理想的基准数,效率仍然不尽如人意。

需要注意的是,编程语言通常生成的是“伪随机数”。如果我们针对伪随机数序列构建一个特定的测试样例,那么快速排序的效率仍然可能劣化。

为了进一步改进,我们可以在数组中选取三个候选元素(通常为数组的首、尾、中点元素并将这三个候选元素的中位数作为基准数得到真正的left基准数,防止因为基准数,选择不恰当导致时间复杂度变高

 
 

在某些输入下,快速排序可能占用空间较多。以完全有序的输入数组为例,设递归中的子数组长度为 m ,每轮哨兵划分操作都将产生长度为 0 的左子数组和长度为 m−1 的右子数组,这意味着每一层递归调用减少的问题规模非常小(只减少一个元素,递归树的高度会达到 n−1 ,此时需要占用 O(n) 大小的栈帧空间。

为了防止栈帧空间的累积,我们可以在每轮哨兵排序完成后,比较两个子数组的长度仅对较短的子数组进行递归,较长的子数组放在下一次快速排序中,这样可以减少递归深度,减少空间复杂度。由于较短子数组的长度不会超过 n/2 ,因此这种方法能确保递归深度不超过 log⁡n ,从而将最差空间复杂度优化至 O(log⁡n) 。代码如下所示


    以上就是本篇文章【排序算法——快速排序】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/quote/12043.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站http://ww.kub2b.com/mobile/,查看更多   
发表评论
0评