2.快速排序

news2024/11/27 2:07:34

快速排序

思想:双指针法(左右指针法)

时间复杂度:O(n log n)(最理想的情况下)

最坏的情况:输入的数组已经是有序的或者接近有序时 快速排序的性能会退化到O(n^2)

我们的快速排序其实就是让两个指针一左一右进行移动

例如我们要升序

就是让右边的指针找到小的数   左边的指针找到大的数  但小于谁  大于谁  我们不妨设定一个基准数  当找到这两个数后令其互换  当左右指针相遇时 将相遇处的值和基准数互换  这样基准数左边的数都将小于基准数  基准数右边的数都将大于基准数  然后我们在分别对左 右两个序列进行排序 直到左 右序列仅剩一个元素或不剩下元素了

变量:left  right  i  j  t  tmp

为了防止left  right移动之后  无法再使用原先位置  

我们这里使用i  j代替left right进行移动  

t用于交换指针i  j处的数  tmp用于存储基准数

  1. 设基准数tmp(我们可以将其设为最左边)
  2. 移动i  j(如果基准数在最左边时  我们先让j(替代right移动)进行移动)
  3. i用于寻找大于基准数的数  j用于寻找小于基准数的数
  4. (当i小于j时)当j找到一个小于基准数的数  再让i移动  然后使i与j位置处的数进行交换
  5. 当i与j相遇时  让基准数和相遇处的数进行交换
  6. 重复上述步骤

注意:当基准数在最左边时  先令j移动  当基准数在最右边时  先让i移动

这里我就不给大家解释原因了 感兴趣的可以自己去想想 如果不这样可能会出错

现在我们以一个例子来解释,如下图:

在这里我们让j先移动 找到小于基准数6的数  再让i找到大于基准数的数  两者交换

当i与j相遇时 将相遇处的数和基准数交换

当基准数和i j相遇处的数交换后  很好的将数据分成了左右两部分  左边都小于基准数  右边都大于基准数  然后我们只需要分别对左右两个序列快速排序即可

接来下 我们给出代码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1558361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wezterm配置

Windows 的图形界面目前来说在有图形界面的系统中,表现最稳定 linux 的终端最方便 和 tui 程序也多 我建议winodws安装 wsl 既可以使用 linux的环境和可以使用windows的桌面 关键 neovide --wsl 的表现很棒 如果项目的历史提交很多而且,工程很大&#xf…

C++STLmap,set

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

吴恩达2022机器学习专项课程(一) 4.4 学习率

问题预览/关键词 学习率太小有什么影响?学习率太大有什么影响?如果成本函数达到局部最小值,使用梯度下降还能继续最小化吗?为什么学习率固定,而最小化成本函数的步幅却越来越缓?如何选择合适的学习率&…

前端学习<二>CSS基础——12-CSS3属性详解:动画详解

前言 本文主要内容: 过渡:transition 2D 转换 transform 3D 转换 transform 动画:animation 过渡:transition transition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征,可以实现元素不同状态间的平滑过渡…

2024 MCM数学建模美赛2024年A题复盘,思路与经验分享:资源可用性与性别比例 | 性别比例变化是否对生态系统中的其他生物如寄生虫提供优势(五)

审题 第四问让我们探究性别比例变化是否对生态系统中的其他生物如寄生虫提供优势。这里我们可以把问题简化一下,只探究性别比例会不会对寄生虫提供优势。因为考虑太多生物,会使模型更复杂,我这个水平处理不了这么复杂的问题,是我…

宠物领养(源码+文档)

宠物领养管理系统(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能项目截图客户端主页举报页注册页领养详细发布寻宠/送养领养页 管理端送养管理用户管理科普管理签到管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、…

【javaWeb 第八篇】后端-Mybatis(万字详细学习)

Mybatis框架 前言MybatisMybatis入门配置SQL提示JDBC数据库连接池lombok Mybatis基础操作日志输出Mybatis的动态SQL 前言 这篇是作者学习数据持久层框架Mybatis的学习笔记,希望对大家有所帮助,希望大家能够与作者交流讨论 Mybatis Mybatis是一款优秀的…

书生·浦语大模型实战营之轻松玩转书生·浦语大模型趣味案例

书生浦语大模型实战营 为了帮助社区用户高效掌握和广泛应用大模型技术,我们重磅推出书生浦语大模型实战营系列活动,旨在为开发者们提供全面而系统的大模型技术学习课程。加入我们,一起深入大模型全流程,从零搭建 RAG、多模态和智…

23种设计模式之创建型模式 - 单例模式

文章目录 一、单例模式1.1单例模式定义1.2 单例模式的特点 二、实现单例模式的方式2.1 饿汉式2.2 懒汉式2.3 双重检查锁:2.4 静态内部类2.5 枚举实现(防止反射攻击): 一、单例模式 1.1单例模式定义 单例模式确保系统中某个类只有…

基于SSM汽车交易系统

基于SSM汽车交易系统的设计与实现 摘要 电子商务的兴起不仅仅是带来了更多的就业行业。同样也给我们的生活带来了丰富多彩的变化。多姿多彩的世界带来了美好的生活,行业的发展也是形形色色的离不开技术的发展。作为时代进步的发展方面,信息技术至始至终…

Geoserver中CQL_FILTER的使用

概述 在Geoserver中可通过CQL_FILTER对要素进行过滤,CQL_FILTER即支持属性过滤也支持空间过滤,本文通过实际的例子演示如何使用CQL_FILTER。 简介 CQL(Common Query Language)是为OGC目录规范创建的纯文本语言。GeoServer对其进行了调整,使…

批量爬取招聘网站【Boss直聘】上工作岗位的招聘信息

不管是学生还是工作的小伙伴,估计都对不同岗位工作几年的薪酬水平比较感兴趣。本文提供爬取招聘网站,获取某类工作招聘信息的实现逻辑和代码。具体的实施步骤是:明确爬取的招聘网站—确定爬取的工作城市—确定爬取的岗位—获取岗位的招聘子链…

前端学习<二>CSS基础——13-CSS3属性:Flex布局图文详解

前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强。其强大的伸缩性和自适应性,在网页开中可以发挥极大的作用。 flex 初体验 我们先来看看下面这个最简单的布局…

【蓝桥杯嵌入式】六、真题演练(一)-1演练篇:第 届真题

温馨提示: 真题演练分为模拟篇和研究篇。本专栏的主要作用是记录我的备赛过程,我打算先自己做一遍,把遇到的问题和不同之处记录到演练篇,然后再返回来仔细研究一下,找到最佳的解题方法记录到研究篇。 解题记录&#x…

了解 LoadRunner 性能测试软件及其基础使用

目录 一、了解LoadRunner 1、什么是Loadrunner? 2、Loadrunner包括什么组件? (1)前台组件 (2)后台组件 二、LoadRunner三大组件 1、VuGen(虚拟用户脚本生成器) (…

2024全开源小狐狸ai付费创作系统V2.8.0

源码介绍 小狐狸GPT付费体验系统的开发基于国外很火的ChatGPT,这是一种基于人工智能技术的问答系统,可以实现智能回答用户提出的问题。相比传统的问答系统,ChatGPT可以更加准确地理解用户的意图,提供更加精准的答案。同时&#x…

算法---动态规划练习-10(删除并获得点数)

题目 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址:点这里 2. 讲解算法原理 rob_s函数:这个函数实现了经典的"打家劫舍"问题的算法。使用动态规划的思想,通过填表的方式计算在给定范围内能够获取的最大点数。 f和…

Windows入侵排查

目录 0x00 前言 0x01 入侵排查思路 1.1 检查系统账号安全 1.2 检查异常端口、进程 1.3 检查启动项、计划任务、服务 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时…

PAT(多路复用)配置

PAT(多路复用) 核心:多个内网IP对应一个公共IP 如下图: 配置命令: 第一步(定义访问控制列表) access-list 编号 permit 网络地址 反掩码 第二步(定义合法的外部IP) ip …

杰发科技——Jlink插件使用

0. 简介 杰发自带的烧录工具是ATCLink,基于DapLink适配。个人不太喜欢ATCLink,推荐使用Jlink,毕竟自己买,不用问原厂要,而且带Jlink,至少5Mhz以上。 V9烧录器使用7.50以下版本驱动。 V11烧录器可以使用7…