快速排序排序方法演示及算法分析(附代码和实例)
基本思想:
- 任取一个元素(比如第一个)为中心,称为枢轴(pivot)
- 所有比它小的元素一律前放,比它大的元素后放,形成左右两个子表
- 对各子表重新选择中心元素并以此规则调整
- 直到每个子表的元素只剩一个
算法
void QSort(SqList &L, int low, int high){if(low<high){pivotloc = Partition(L,low, high);//将L.r[]一分为二,pivotloc为枢轴元素排好序的位置QSort(L, low, pivotloc-1);//对左子表递归排序QSort(L, pivotloc+1, high);//对右子表递归排序}
}
int Partition(SqList &L, int low, int high){L.r[0]=L.r[low];pivotkey = L.r[low].key;while(low<high){while(low<high && L.r[high.key]>=pivotkey)--high;L.r[low]=L.r[high];while(low<high && L.r[low.key]<=pivotkey)++low;L.r[high] = L.r[low];}L.r[low]=L.r[0];return low;
}
示例
对于序列49 38 65 97 76 13 27,进行快速排序,步骤如下:
以第一个元素49作为枢轴,即pivotkey=49,进行第一轮排序,最后一个元素开始,将序列中大于49的元素放在右边,小于49的元素放在左边
27<49,将27放在左侧 i 所指的位置上,i++
38<49,38放在左侧i的位置上(已处在合适的位置),i++
65>49,将65放在右侧 j 所指的位置上,j--
13<49,将13放在左侧 i 所指的位置上,i++
以此类推,直到 i=j,用枢轴pivotkey替换此时的 i 和 j 的位置
第一轮排序过程如下

第一轮排序后,由于左右子序列元素个数均大于1,继续对左右子序列排序
对左子序列排序
选第一个元素为枢轴
排序过程如下

经过一趟快排之后,左右子序列的元素个数均为1,左子序列排序结束
对右子序列排序
选第一个元素为枢轴
排序过程如下:

经过一趟快排之后,左右子序列的元素个数均为1,右子序列排序结束
排序结束,生成的有序序列为13 27 38 49 65 76 97
时间复杂度
O( n l o g 2 n nlog_2n nlog2n)
- QSort():Q( l o g 2 n log_2n log2n)
- Partition():O(n)
就平均计算时间而言,快速排序是所有内排序方法中最好的一个
空间复杂度
快速排序不是原地排序
由于程序使用了递归,需要递归调用栈的支持,而栈的长度取决于递归调用的深度
- 平均情况下,需要O(logn)的空间
- 最坏情况下,需要O(n)的空间
稳定性
快速排序是一种不稳定的排序方法
相关文章:
快速排序排序方法演示及算法分析(附代码和实例)
基本思想: 任取一个元素(比如第一个)为中心,称为枢轴(pivot)所有比它小的元素一律前放,比它大的元素后放,形成左右两个子表对各子表重新选择中心元素并以此规则调整直到每个子表的元…...
库迪困境:供应链补救失效背后的市场错配
作者 | 曾响铃 文 | 响铃说 近日,红餐网证实了库迪咖啡暂停便捷店招商的消息。库迪官方回应称,店中店模式招商只是按下了暂停键,不排除未来重启的可能。 但一批被“暂停”的便捷店加盟商,不知道等不等起库迪的未来重启。 小红…...
解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题
1 功能特点 openpyxl: 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作…...
基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程(附Pytorch源代码)
基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程 一、引言 偏微分方程(Partial Differential Equation, PDE)在科学与工程领域有着广泛的应用。传统数值方法(如有限差分法、有限元法)在求解这类问题时,尽管已经非常成熟,但随着问题复杂度的增加,其计…...
小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式
这一节目标是实现底部推荐商品的结构和样式,由于这里要求横向滚动,所以需要使用上节介绍的 scroll-view 功能,并使用 scroll-x 属性支持横向滚动,推荐商品区域中的每一个商品是一个单独的 view,每个view 中需要写三个组…...
Flink读写Kafka(DataStream API)
在Flink里,已经预定义了kafka connector,使用该connector我们可以读写kafka,并且能实现exactly once的语义。 要使用需要引入相关的maven依赖,在这里,因为读写kafka,就会涉及一个问题,kafka-client和broker的版本兼容问题,不过因为kafka client和broker的双向兼容的良…...
SCAU期末笔记 - 数据库系统概念往年试卷解析
数据库搞得人一头雾水,题型太多太杂,已经准备摆烂了。就刷刷往年试卷,挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项? 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...
flutter在windows平台中运行报错
PS D:\F\luichun> flutter run当运行flutter项目时,【解决如下报错】 /C:/flutter/packages/flutter/lib/src/painting/star_border.dart:530:27: Error: The getter Matrix4 isnt defined for the class _StarGenerator.- _StarGenerator is from package:flut…...
HTML——75. 内联框架
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>内联框架</title><style type"text/css">iframe{width: 100%;height: 500px;}</style></head><body><!--iframe元素会创建包含…...
python对mongodb的增删查改
python对mongodb的增删查改 1. 安装 pymongo2. 连接 MongoDB3. 创建(插入)文档插入单个文档插入多个文档 4. 查询文档查询单个文档查询多个文档复杂查询嵌套查询分页条件查询(通用模版) 5. 更新文档更新单个文档更新多个文档更新嵌…...
【JS】期约的Promise.all()和 Promise.race()区别
概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法,但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象(例如数…...
使用 RxJS 库实现响应式编程
什么是 RxJS? RxJS(Reactive Extensions for JavaScript)是一个用于响应式编程的库,它使得处理异步数据流变得更加简单和优雅。通过使用 Observables(可观察对象),你可以轻松地处理事件、HTTP …...
ARP攻击的原理和实现 (网络安全)
ARP攻击的原理和实现 ARP(Address Resolution Protocol,地址解析协议)是一种网络协议,用于在局域网内将IP地址映射到MAC地址。在以太网中,设备通过广播ARP请求来查询目标IP地址对应的MAC地址,从而建立通信…...
chatgpt model spec 2024
概述 这是模型规范的初稿,该文档规定了我们在OpenAI API和ChatGPT中的模型的期望行为。它包括一组核心目标,以及关于如何处理冲突目标或指令的指导。 我们打算将模型规范作为研究人员和数据标注者创建数据的指南,这是一种称为从人类反馈中进…...
单片机-LED实验
1、51工程模版 #include "reg52.h" void main(){ while(1){ } } 2、LED灯亮 #include "reg52.h" sbit LED1P2^0; void main(){ while(1){ LED10; } } 3、LED闪烁 #include "reg52.h" sbit LED1P2^0; //P2大…...
QILSTE H10-C321HRSYYA高亮红光和黄光LED灯珠
在深入探讨H10-C321HRSYYA型号的复杂特性之前,我们首先需要明确其基本参数和功能。这款型号的LED产品以其独特的双色设计和卓越的性能在众多同类产品中脱颖而出。其外观尺寸为3.0x1.0x2.1mm,采用高亮黄光和红光的双色组合,赋予了其在多种应用…...
Appium(一)--- 环境搭建
一、Android自动化环境搭建 1、JDK 必须1.8及以上(1) 安装:默认安装(2) 环境变量配置新建JAVA_HOME:安装路径新建CLASSPath%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar在path中增加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(3) 验证…...
量子力学复习
黑体辐射 热辐射 绝对黑体: (辐射能力很强,完全的吸收体,理想的发射体) 辐射实验规律: 温度越高,能量越大,亮度越亮 温度越高,波长越短 光电效应 实验装置…...
22408操作系统期末速成/复习(考研0基础上手)
第一部分:计算题: 考察范围:(标红的是重点考) 第一章:CPU利用率: 第二章: 进程调度算法(需要注意不同调度算法的优先级和题目中给出的是否可以抢占【分为可抢占和不可抢占ÿ…...
两种分类代码:独热编码与标签编码
目录 一、说明 二、理解分类数据 2.1 分类数据的类型:名义数据与序数数据 2.2 为什么需要编码 三、什么是独热编码? 3.1 工作原理:独热编码背后的机制 3.2 应用:独热编码的优势 四、什么是标签编码? 4.1 工作原理&…...
【实战指南】FreeRTOS 10.4.6源码解析与STM32F429移植全流程
1. FreeRTOS 10.4.6源码获取与解析 第一次接触FreeRTOS源码时,我对着官网密密麻麻的目录树发懵——这堆文件到底哪些才是核心?后来踩过几次坑才明白,Source和portable这两个文件夹就是整个系统的灵魂所在。以STM32F429为例,我们从…...
网络不给力?手把手教你离线安装Chocolatey 1.1.0(附nupkg文件下载与配置)
Windows离线安装Chocolatey全攻略:摆脱网络依赖的终极方案 每次打开PowerShell准备大展拳脚时,却被网络问题绊住脚步?作为Windows生态中最受欢迎的包管理工具,Chocolatey的在线安装方式常常让身处特殊网络环境的开发者头疼不已。本…...
终极指南:3小时完成100个NCBI基因组数据批量下载的完整解决方案
终极指南:3小时完成100个NCBI基因组数据批量下载的完整解决方案 【免费下载链接】ncbi-genome-download Scripts to download genomes from the NCBI FTP servers 项目地址: https://gitcode.com/gh_mirrors/nc/ncbi-genome-download 作为生物信息学研究人员…...
别再只用v4了!Node.js中UUID v1到v5的实战选择与避坑指南
Node.js中UUID版本全解析:从v1到v5的深度选择指南 在分布式系统开发中,唯一标识符的生成从来都不是一个简单的选择题。当我们打开Node.js的uuid库文档时,面对v1到v5五个版本的选择,很多开发者会不假思索地选择最熟悉的v4——这可能…...
Qt6实战:用setGeometry和事件过滤器,实现一个可拖拽调整大小的自定义控件(附完整源码)
Qt6实战:打造可拖拽调整大小的Photoshop风格浮动面板 在图形界面开发中,能够自由拖拽和调整大小的浮动面板是专业级应用的标配功能。就像Photoshop的工具箱那样,用户可以随心所欲地摆放工作区组件。本文将带你用Qt6实现这样一个工业级交互控件…...
别再傻傻用Delay了!用STM32CubeIDE的定时器中断实现按键实时切换LED流水灯方向
STM32CubeIDE实战:用定时器中断打造零延迟按键控制LED流水灯 第一次接触STM32开发时,我也曾陷入"Delay陷阱"——用HAL_Delay()实现LED流水灯效果,结果按键响应卡顿得像老式拨号上网。直到某次产品演示现场,客户连续快速…...
从VGG16到Xception:手把手拆解DeepLab系列四大版本的核心演进与代码实现
从VGG16到Xception:DeepLab系列四大版本核心技术演进与实战解析 语义分割技术正经历着从基础架构到精细化设计的快速迭代。作为这一领域的标杆性工作,DeepLab系列从2015年的v1版本到2018年的v3版本,展现了一条清晰的技术演进路径——从最初的…...
竞赛技术中的题目设计评分标准与竞赛平台
竞赛技术中的题目设计评分标准与竞赛平台 在各类编程竞赛、算法比赛或创新挑战中,题目设计的科学性和竞赛平台的功能性直接影响参赛者的体验与比赛结果的公平性。优秀的题目设计不仅需要考察参赛者的技术能力,还需兼顾创新性和实用性;而竞赛…...
intv_ai_mk11开源模型部署:支持国产化环境的Llama中文适配版
intv_ai_mk11开源模型部署:支持国产化环境的Llama中文适配版 1. 模型概述 intv_ai_mk11是基于Llama架构开发的中文文本生成模型,专为国产化环境优化设计。这个中等规模的模型特别适合处理通用问答、文本改写、解释说明和简短创作等任务。 与原始Llama…...
别再为时间戳对不齐发愁了!用pandas的merge_asof()轻松搞定金融数据分析
金融数据分析实战:用pandas的merge_asof()解决时间戳匹配难题 金融数据分析师们经常遇到这样的场景:当你需要将交易记录与市场行情数据进行关联分析时,却发现两者的时间戳无法完美对齐。传统的精确匹配方法在这里显得力不从心,而手…...
