排序算法——快速排序

news2024/12/31 7:14:25

快排

​ 确定一组数据 ,即q数组

​ 左端点为了,右端点为r

​ (1)确定分界点

​ q[l] 或 q[ (l + r) / 2] 或 q[r] 或任意一个数 作为分界点,分界点数为x

​ (2)调整区间 (重点)

​ 使 <= x的数放在左半边,使 >= x 的数放在右半边,两边的数可以乱序,暂时不用排序

​ (3)利用递归处理左右两端 ,进行排序

​ 暴力法

​ (1)开两个额外数组a,b

​ (2)扫描 l 到 r 的所有数,将 <= x 的值放到a中,将 >= x的数放到b中

​ (3)将a,b排序后放到q数组中 a[ ] -> q[ ], b[ ]->q[ ];

​ (4)弊端:额外开辟空间,占用内存

​ 简便方法(指针)

​ 用两个指针i,j指向左端与右端的数

​ (1)判断指针i所指向的数是否小于x,符合条件时往右移一位,当大于等于x时指针i停下

​ (2)判断指针j所指向的数是否大于x,符合条件时往左移一位,当小于等于x时指针停下

​ (3)将i与j指针所指向的数交换,并再次重复1,2,3,直到i,j走到中间位置

​ (4)两边排序

模板

#include <iostream> // scanf和printf也在iostream里面 ,但cstdio更快一些
#include <cstdio> 
#include <algorithm> //使用swap函数
using namespace std;
const int N = 1000001;
int n;
int q[N];
void quick_sort(int q[ ], int l, int r)
{
    if (l >= r) return ; // 返回一个随机值,该return只是起到一个中止的作用,无需返回特定值
    int x = q[l], i = l - 1, j = r + 1,;
    //x = q[(l+r+1 )/2    一定不能取到边界上,上面的x只是举例
    // x = q[l + r >> 1]会更快,以后再理解
    while (i < j)
    {
        do {
            i++;
        } while (q[i] < x);
        do {
            j--;
        } while (q[j] > x);
            if (i < j) swap(q[i],q[j]);
    }
    if(l < j )quick_sort(q, l, j);//左半部分
    if(i < r)quick_sort(q, j + 1, r);//右半部分
}
int main()
{
    scanf("%d", &n);
    for (int i = 0;i < n;++i) scanf("%d", &q[i]);
    quick_sort(q, 0, n-1);
    for (int i = 0;i < n;++i) printf("%d ", q[i]);
    return 0;
}

END


自学编程的小伙伴们不容易,在学习编程的路上会遇到很多瓶颈,甚至会感到迷茫,为此我给大家整理了一些资源福利,都放在下方啦,还可以和群里的小伙伴们一起来学习交流嗷~

C/C++编程学习基地icon-default.png?t=M85Bhttps://jq.qq.com/?_wv=1027&k=9Hqqlikh

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

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

相关文章

能源监控管理系统|瑜岿科技

瑜岿科技在产业转型升级过程中积极布局智能制造、物联网产业细分领域&#xff0c;拥抱多元化市场。立足市场、顺势而为&#xff0c;以创新理念驱动产业变革&#xff0c;以互联网、物联网思维重塑经营模式&#xff0c;成功打造“碳中和 碳达峰”背景下——能源监控管理系统。 智…

leetCode周赛-317

这里写目录标题题目一&#xff1a;6220.可被三整除的偶数的平均值题目二&#xff1a;6221. 最流行的视频创作者题目三&#xff1a;6222. 美丽整数的最小增量题目四&#xff1a;2458. 移除子树后的二叉树高度题目一&#xff1a;6220.可被三整除的偶数的平均值 AC代码&#xff1…

考研数学练习题-2022年12月23日

日期&#xff1a;2022年12月23日 数量&#xff1a;10

deck.gl 调研

0 结论 deck gl 是基于 WebGL 的数据可视化框架&#xff0c;可以集成在主流的地图框架&#xff08;arcgis&#xff0c;google maps&#xff0c;mapbox &#xff09;中使用&#xff0c; 也可以单独使用。 deck gl 通过layer进行数据可视化&#xff0c;支持多种展示效果&#xf…

什么是网络监控?OpManager 网络监控解决方案

什么是网络监控 在当今世界&#xff0c;术语网络监控在整个IT行业中很普遍。网络监控是一个关键的 IT 过程&#xff0c;其中所有网络组件&#xff08;如路由器、交换机、防火墙、服务器和虚拟机&#xff09;都受到故障和性能监控&#xff0c;并持续评估以维护和优化其可用性。…

基于防火墙双击热备三层网络规划_ensp综合实验

作者&#xff1a;BSXY_19计科_陈永跃BSXY_信息学院注&#xff1a;未经允许禁止转发任何内容基于防火墙双击热备三层网络规划_ensp综合实验前言及技术/资源下载说明&#xff08; **未经允许禁止转发任何内容** &#xff09;插曲&#xff1a;基于eNSP中大型校园/企业网络规划与设…

聊聊首次使用航顺HK32F030C8T6的体验

先说结论&#xff0c;项目基本上开发测试完成了,mcu运行正常。 这个项目是一个智能家居的项目&#xff0c;主板和副板都使用了HK32F030C8T6&#xff0c;这也是笔者第一次使用航顺的芯片。 关于这个芯片的资料&#xff0c;从官网只能下载到datasheet和user mannal的pdf文档&am…

代码随想录训练营第59天|LeetCode 503.下一个更大元素II、42. 接雨水

参考 代码随想录 题目一&#xff1a;LeetCode 503.下一个更大元素II 这个题在496. 下一个更大元素 I基础上数组变成了环&#xff0c;其实两次两次数组就可以了。代码如下&#xff1a; class Solution { public:vector<int> nextGreaterElements(vector<int>&am…

即时通讯实时视频聊天技术提供QoS保证的方法

随着WebRTC标准的逐步推广&#xff0c;实时音视频通讯技术受到越来越多公司和技术人员的关注。 对于交互式音视频应用而言&#xff0c;稳定、低延时、通话质量清晰可靠是其基本需求。在互联网环境下&#xff0c;音视频的通话质量与以下因素有关&#xff1a;一是编码码率、帧率和…

Opencv IplImage 和 Mat 使用介绍

1. IPIImage 使用介绍 IplImage是OpenCV中CxCore部分基础的数据结构&#xff0c;用来表示图像&#xff0c;其中Ipl是Intel Image Processing Library的简写。以下是IplImage的结构分析。参见:OpenCV中文网站 typedef struct _IplImage{int nSize; /* IplImage大小 *…

70页幻灯片图解“工信领域数据安全管理办法”等五部委数据法规

国家安全是民族复兴的根基。党的二十大报告指出&#xff0c;“加快建设制造强国、质量强国、航天强国、交通强国、网络强国、数字中国”、“推进国家安全体系和能力现代化”、“强化经济、重大基础设施、金融、网络、数据、生物、资源、核、太空、海洋等安全保障体系建设”。数…

02-redis篇 redis事务处理及使用方式

目录 1. 事务简介: -> 1.1 必须满足: ACID四个特性(原子性,一致性,隔离性,持久性) -> 1.2 简单理解: 一个业务,也可以看成是一个逻辑工作单元; 2. redis 操作事务的基本指令 -> 指令: -> 图式: 3. 模拟多事务操作(watch乐观锁) 3.1 不开启乐观锁watch操作…

Linux Python安装

1.到官网下载适合自己的版本 Python Source Releases | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/source/2.下载好压缩包之后&#xff0c;将压缩包解压开 3.将开发环境的依赖包准备好 yum -y install zlib-devel bz…

阅读笔记 MulDA: DAGA向多语言方向的拓展

阅读笔记 MulDA: DAGA向多语言方向的拓展 文章目录阅读笔记 MulDA: DAGA向多语言方向的拓展前言概述IntroductionMulDA: Our Multilingual Data Augmentation Framework1、Labeled Sequence Translation2、Synthetic Data Generation with Language Models3、Semi-supervised M…

Tableau可视化设计案例-05Tableau进阶

文章目录Tableau可视化设计案例05Tableau进阶1.数据集合并1.1 数据导入界面1.2超市销售情况符号地图1.3智能显示1.4 仪表盘高级应用Tableau可视化设计案例 本文是Tableau的案例&#xff0c;为B站视频的笔记&#xff0c;B站视频 参考&#xff1a;https://www.bilibili.com/vide…

怎么使用CAM350检查Gerber?

文章目录什么是Gerber文件&#xff1f;Gerber中的文件由那些组成&#xff1f;怎么使用CAM350检查Gerber&#xff1f; ——导入CAM350的基础操作&#xff1a;对层的操作什么是Gerber文件&#xff1f; Gerber文件是设计完后PCB(brd文件)板文件后交给板厂制造成品的文件。Gerber一…

代码随想录刷题记录 day50 每日温度+下一个更大元素 I

代码随想录刷题记录 day50 每日温度下一个更大元素 I 739. 每日温度 思想 1.暴力解 两次for 超时了 2.单调栈 花了点时间理解的。 单调栈的基础入门题。找到一个数组中右边的第一个大于 等于 或者小于当前元素的下标的位置 以时间换空间&#xff0c;用一个栈来记录右边第…

明道云联合RestCloud打造APaaS+IPaaS融合解决方案

背景介绍 APaaSIPaaS发展趋势 随着企业规模的扩张以及业务需求变化越来越快&#xff0c;企业现有IT系统无法快速应对前端敏捷化的需求。企业IT架构将朝着敏捷化、低代码化、服务化方向发展&#xff0c;而APaaSIPaaS解决方案在这种需求下应运而生&#xff0c;IPaaS可以把现有固…

ARAS plm安装,各种踩坑

目录准备工作sql server安装NET Framework安装许可申请IIS服务开启IIS无法启动报错 HTTP 错误 500.19 - Internal Server Error错误变为 aras Error: Cannot access OAuth Server due to 500 (Internal Server Error)**Aras安装准备工作 sql server安装 登录出现的几个错误 s…

Python数据分析挖掘案例:Python爬虫助力疫情数据追踪

通过学习Python数据分析挖掘案例&#xff0c;可以掌握通过Python爬虫获取的数据进行处理以及可视化分析的主要方法和技能&#xff0c;并为后续相关课程学习及将来从事数据分析工作奠定基础。 新冠病毒疫情在武汉突然爆发&#xff0c;确诊病例、疑似病例、死亡病例等数据牵动着每…