文章目录

  • 概述
  • 算法思路
  • 动画演示
  • 代码实现
  • 算法特点

概述

快速排序是对冒泡排序的一种改进,也是当前人们认为综合效率最好的排序算法。
下面,让我们一起来学习最基本的快速排序叭~
建议大家先看看第一篇和第二篇。

算法思路

我们需要先找一个基准数k。在最基本的快速排序中,k可以是序列中的第一个数。

对于左指针,一个元素合法的定义是:这个数≤k。
左指针向后遍历不停地向后遍历,寻找第一个不合法的数。
3, 7, 1 ≤ 8,
10 ≥ 8。
左指针第一个不合法的数就是a[4] = 10。对于右指针,一个元素合法的定义是:这个数≥k(和k值相等的数在那边都可以)。
在右指针那里,第一个数6就 < 8,不合法。

为了使得这两个数合法,我们把它们交换一下~

我们按照刚才的步骤再操作一次,又得到了两个不合法的数。

交换后,整个序列都合法了。
此时的a数组被分成的两个部分:<k,和≥k的。

我们可以序列分为两部分,每部分继续执行刚才的操作,直到整个序列有序。

动画演示

为方便大家理解,蒟蒻君给大家找了个动画。
这个动画与上述方法唯一不同的就是,基准数放到最后了。但本质还是没变。

代码实现

void quick_sort(int a[], int l, int r) { // l, r表示排序范围 // 递归终止条件:序列为空if (l > r) {return;}int i = l, j = r, k = a[l];while (i != j) {// 一定要先确定右指针,因为这样从而就能确定左指针遍历的范围。 while (a[j] >= k && i < j) { // 右指针如果元素合法就一直向左遍历,停下的时候就是第一个不合法的元素--j;}while (a[i] <= k && i < j) { // 左指针同理 ++i;}swap(a[i], a[j]);  // 即使i == j,交换也不会影响结果 }// 基准数归位a[l] = a[i];a[i] = k;// 将这一段数分为两段处理quick_sort(a, l, i - 1); // 继续处理左边的,这里是一个递归的过程quick_sort(a, i + 1, r); // 继续处理右边的 ,这里是一个递归的过程
}

算法特点

  • 每次将序列分成两部分用O(log2n),共分n次,最优/最差/平均时间复杂度O(n log2n)。
  • 原地排序,空间复杂度O(1)。
  • 因为基准数选择较随意,在快速排序里算比较慢的了(所有种类快速排序本质不会差太多,所以时间复杂度都会写成O(n log2n)。

排序算法大比拼(2.2)——时间O(n log2n)篇之快速排序(左右指针法)相关推荐

  1. 排序算法大比拼(2.1)——时间O(n log2n)篇之归并排序

    文章目录 排序算法时间O(n log2n)篇概述 算法思路 动画演示 代码实现 算法特点 总结 排序算法时间O(n log2n)篇概述 在排序算法中,平均时间O(n log2n)是除特殊排序算法之外最 ...

  2. 排序算法 之四 分类、时间/空间复杂度、如何选择

    写在前面   现在网上关于排序算法的文档不计其数,为什么要写这篇文章呢?主要是因为一些算法虽然在平时有用到,但是从来没有细细整理过,没有个统一.整体的认识.写这篇文章一来是进行一下总结,二来趁机再系统 ...

  3. 12八大排序算法的稳定性以及时间空间复杂度总结

    文章目录 一.排序的稳定性 二.八种排序方式的复杂度和稳定性 三.总结 一.排序的稳定性 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中 ...

  4. 【八大排序(五)】快排进阶篇-挖坑法+前后指针法

  5. python 十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...

  6. 十大经典排序算法Python版实现(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  7. 统治世界的十大排序算法!

    来源:https://www.cnblogs.com/onepixel 0 算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不 ...

  8. 一文读懂Python版的十大经典排序算法(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  9. 利用Python实现十大经典排序算法(附代码流程)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:hustcc 来源:https://github.com/hustcc/JS ...

最新文章

  1. IE 无法点击文本框或输入文字
  2. git修改远程仓库关联
  3. php 删除文件时间,php删除文件后重建,文件创建时间(filectime)未变化怎么解决??...
  4. Oracle数据库权限管理
  5. linux uname 命令 打印系统信息
  6. Game as a Service —— 开源云游戏搭载WebRTC
  7. permgen_打破PermGen神话
  8. 如何理解CPU上下文切换(二)
  9. FreeRTOS基础认识
  10. visio中画细箭头
  11. 跨步电压 matlab仿真,跨步电压,跨步电压触电,跨步电压法,论文集锦_发表网
  12. 谷歌浏览器上不了网如何设置_如何解决电脑网络连接正常却上不了网
  13. Edsger W. Dijkstra -- 巨人的肩膀
  14. 通过爬虫获取免费IP代理,搭建自己的IP池(https)
  15. 如何有效规避程序化交易的滑点?
  16. Linux嵌入式开发必读推荐书籍
  17. mcpe服务器网页控制台教程,mcpe服务器指令
  18. ImportError: No module named 'win32api'
  19. 解决sourcetree特别卡的问题
  20. 计算机组成原理实验一报告——运算器

热门文章

  1. iOS 14.5正式版如约而至 支持通过Apple Watch解锁iPhone
  2. 陶陶摘苹果//C语言
  3. 程序员必备编辑器软件
  4. 红颜弹指老,刹那芳华(转载 作者:程灵素)
  5. Arduino框架下对ESP32 NVS非易失性存储解读以及应用示例
  6. 使用Matplotlib绘制3D图形
  7. 水果食用大全 -- 果品食疗 - 葡萄
  8. 【我想对策划说的事】-- 入职dy一年后被邀请召开的扯淡分享会讲稿
  9. 将一个数的每一位都正序输出——简单算法
  10. [Linux] scp免密码登录