C++ 基础算法 快速排序

之前写过这道题的分享,但是比较粗糙,因此这里想系统记录一遍。
给定你一个长度为 n
的整数数列。

请你使用快速排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式
输入共两行,第一行包含整数 n

第二行包含 n
个整数(所有整数均在 1∼109
范围内),表示整个数列。

输出格式
输出共一行,包含 n
个整数,表示排好序的数列。

数据范围
1≤n≤100000
输入样例:
5
3 1 2 4 5
输出样例:
1 2 3 4 5

#include <iostream>using namespace std;const int N = 100010;int n;
int q[N];void quick_sort(int q[], int l, int r)
{if(l >= r) return;//int x = q[l], i = l - 1, j = r + 1; // 分界点确定为q[l]会超时int x = q[(l + r) / 2], i = l - 1, j = 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]);}quick_sort(q, l , j);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]);printf("\n");return 0;
}

这里值得讨论的是:

**在快速排序算法中,选取分界点的方式会影响算法的性能。**如果选取的分界点恰好是数组的最小或最大值,或者数组是已经排序好的情况下,快速排序的性能可能会变得很差,因为每次划分都会得到极度不平衡的子数组,导致递归深度增加,最坏情况下时间复杂度达到O(n^2)。

为了解决这个问题,通常采用的方法是随机选取分界点。(本题中采取中点为分界点)这样可以降低快速排序在最坏情况下的概率,提高算法的平均性能。具体的做法是在待排序数组中随机选择一个元素作为分界点,然后继续进行划分操作。

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

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

相关文章

SNMP——简单网络管理协议

Q 什么SNMP? A:SNMP是广泛应用于TCP/IP网络的网络管理标准协议&#xff0c;该协议能够支持网络管理系统&#xff0c;用以监测连接到网络上的设备是否有任何引起管理上关注的情况。SNMP采用轮询机制&#xff0c;提供最基本的功能集&#xff0c;适合小型、快速、低价格的环境使…

【Docker】dockerfile学习

目录 一、Dockerfile文件说明FROMRUNWORKDIRADDCOPYENV 二、例子解析三、构建Dockerfile实例&#xff08;FROM ubuntu:20.04&#xff09;部署一整套的系统和目标软件&#xff08;FROM python:3.7&#xff09;专注于Python应用的快速部署&#xff08;FROM ubuntu:20.04&#xff…

vue项目中下载静态资源里的pdf文件

1.把文件放在项目目录src/assets文件下 2.在项目是用a标签下载 <a:href"require(/assets/download.pdf)"download"使用说明.pdf"target"_blank"><img src"/assets/banner.png" class"bannerimg"/></a> 以…

【xv6-labs】02 Lab: system calls

GDB 如何启动gdb 启动 make CPUs1 qemu-gdb在另一个终端启动 gdb-multiarch kernel/kernel进入gdb后输入 target remote localhost:26000 GDB 的一些命令 shell clear # 清屏layout src # 显示源码layout regs # 显示寄存器layout split # 同时显示源码和寄存器backtrace #…

Transformer实战-系列教程15:DETR 源码解读2(整体架构:DETR类)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 DETR 算法解读 DETR 源码解读1&#xff08;项目配置/CocoDetection类/ConvertCocoP…

什么是485远程水表?

485远程水表是一种利用RS485通信协议进行数据传输的智能水表&#xff0c;它具有远程读数、实时监控、数据存储等功能&#xff0c;为水资源管理和居民用水提供了便捷。在我国&#xff0c;随着物联网、大数据等技术的发展&#xff0c;485远程水表得到了广泛的应用&#xff0c;为智…

引领企业服务新篇章,纷享销客揽获4项大奖

近日&#xff0c;连接型CRM的开创者纷享销客&#xff0c;凭借其卓越的整体实力&#xff0c;分别荣获《互联网周刊》&eNet研究院“2023年度最佳企业服务产品奖”、携手盈建科荣获中国工业报社“数字化转型优秀案例”、入选产业家“2023产业数字化金铲奖”以及KVBrand“2023年…

BUUCTF第二十二、二十三题解题思路

第二十二题[WUSTCTF2020]level1 查壳 64位ELF文件&#xff0c;用64位IDA打开。 在函数界面可以看到一个“flag”&#xff0c;跟进该函数。 int __cdecl main(int argc, const char **argv, const char **envp) {int i; // [rsp4h] [rbp-2Ch]FILE *stream; // [rsp8h] [rbp-2…

Java项目中,值的对应问题

数据库表 实体类&#xff08;对应数据库的字段&#xff0c;可以驼峰命名&#xff09; 封装的查询方法sql List<Student> getAllStudents(String name,String studentId,Integer classId,String className); 这里的值一一对应。 在多表查询时&#xff0c;查询到的指定字段…

备战蓝桥杯 Day3

目录 搜索与回溯 1222&#xff1a;放苹果 1221&#xff1a;分成互质组 1218&#xff1a;取石子游戏 数组 1126&#xff1a;矩阵转置 1127&#xff1a;图像旋转 1128&#xff1a;图像模糊处理 1120&#xff1a;同行列对角线的格 string 2046&#xff1a;【例5.15】替换…

JAVA高并发——核心知识点

文章目录 1、重要概念1.1、同步(Synchronous)和异步(Asynchronous)1.2、并发(Concurrency)和并行(Parallelism)1.3、临界区1.4、阻塞(Blocking)和非阻塞(Non-Blocking)1.5、死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)1.6、并发级别1.6.1、阻塞1.6.2、无饥饿(Starvation…

2011-2022年上市公司ESG表现、制造业高质量发展与数字化转型原始数据计算结果do代码

2011-2022年上市公司ESG表现、制造业高质量发展与数字化转型 原始数据(exceldta)计算结果do代码 参照王丹&#xff08;2023&#xff09;的做法&#xff0c;对来自统计与决策《ESG表现、制造业高质量发展与数字化转型》一文中的基准回归部分进行复刻&#xff1a; 1、数据时间&a…

java 单例模式

单例模式是最简单的设计模式之一。即一个类负责创建自己的对象&#xff0c;同时确保只有单个对象被创建&#xff0c;提供一种访问其唯一的对象的方式&#xff0c;可以直接访问&#xff0c;不需要实例化该类的对象。 1、懒汉式&#xff0c;线程不安全 public class Singleton …

两个发散级数的和是否发散?

1、两个发散级数的和可能是收敛的也可能是发散的。 例子&#xff1a; 发散级数 ∑ 1 n \sum\frac{1}{n} ∑n1​和发散级数 ∑ ( 1 n 2 − 1 n ) \sum(\frac{1}{n^{2}}-\frac{1}{n}) ∑(n21​−n1​)的和是收敛级数&#xff1b; 发散级数∑(1/n) 和发散级数 ∑(1/n1/n) 的和是…

为什么你用的redis没有出现雪崩,击穿,穿透

一、前言 在大规模并发访问系统中&#xff0c;如果你的系统用到redis&#xff0c;在面试的时候面试官往往会问你的系统有没有出现雪崩&#xff0c;击穿&#xff0c;穿透这样的场景&#xff0c;然后是怎样解决的。博主也经常反复温习redis的特性&#xff0c;总是被雪崩&#xf…

不懂咱就学,记不住多看几遍(二)

一、Redis分布式锁中加锁与解锁、过期如何续命 实现要点&#xff1a; 互斥性&#xff0c;同一时刻&#xff0c;只能有一个客户端持有锁。防止死锁发生&#xff0c;如果持有锁的客户端因崩溃而没有主动释放锁&#xff0c;也要保证锁可以释放并且其他客户端可以正常加锁。加锁和…

请解释 C++ 中的析构函数,并说明它们的作用。

请解释 C 中的析构函数&#xff0c;并说明它们的作用。 在C中&#xff0c;析构函数&#xff08;Destructor&#xff09;是一种特殊类型的成员函数&#xff0c;用于在对象被销毁时执行特定的清理工作。析构函数的名称与类名相同&#xff0c;前面加上一个波浪号&#xff08;~&am…

【C++开篇 -- 入门语法篇】

C学习笔记---001 C知识开篇1、介绍C的背景以及与C语言的区别1.1、什么是C?1.2、C的背景 2、C与C语言的区别3、C优化命名空间3.1、C中的问题3.2、命名空间的应用 4、总结 C知识开篇 前言&#xff1a; 首先&#xff0c;C兼容C&#xff0c;C在C语言范畴上增添了一些优化&#xf…

WPF中样式

WPF中样式:类似于winform中控件的属性 <Grid><!-- Button属性 字体大小 字体颜色 内容 控件宽 高 --><Button FontSize="20" Foreground="Blue" Content="Hello" Width="100" Height="40"/></Grid&g…

proteus8.15图文安装教程

proteus8.15版本可以用STM32系列单片机来进行仿真设计&#xff0c;比7.8版本方便多了&#xff0c;有需要的朋友们可以在公众号后台回复 proteus8.15 获取软件包。 1、下载好软件包&#xff0c;解压如下&#xff0c;右键proteus8.15.sp1以管理员身份运行。 2、第一次安装&#x…