当前位置: 首页 > article >正文

LeetCode 快速排序题解

LeetCode 快速排序题解题目描述实现快速排序算法对一个整数数组进行排序。示例输入[64, 34, 25, 12, 22, 11, 90]输出[11, 12, 22, 25, 34, 64, 90]解题思路方法快速排序思路快速排序的核心思想是分治选择一个基准元素将数组分成两部分左边的元素都小于基准元素右边的元素都大于基准元素然后递归地对左右两部分进行排序。具体步骤选择一个基准元素通常选择数组的第一个元素、最后一个元素或中间元素。将数组分成两部分左边的元素都小于基准元素右边的元素都大于基准元素。递归地对左半部分进行排序。递归地对右半部分进行排序。复杂度分析时间复杂度O(n log n)其中 n 是数组的长度。最坏情况下时间复杂度为 O(n²)当数组已经有序或基本有序时。空间复杂度O(log n)需要额外的空间来存储递归调用的栈。代码实现方法快速排序# 快速排序 def quick_sort(arr): if len(arr) 1: return arr # 选择基准元素这里选择中间元素 pivot arr[len(arr) // 2] # 分成三部分小于基准元素的等于基准元素的大于基准元素的 left [x for x in arr if x pivot] middle [x for x in arr if x pivot] right [x for x in arr if x pivot] # 递归地对左半部分和右半部分进行排序 return quick_sort(left) middle quick_sort(right) # 测试 def test_quick_sort(): arr [64, 34, 25, 12, 22, 11, 90] print(quick_sort(arr)) # 输出[11, 12, 22, 25, 34, 64, 90] arr [5, 4, 3, 2, 1] print(quick_sort(arr)) # 输出[1, 2, 3, 4, 5] arr [1, 2, 3, 4, 5] print(quick_sort(arr)) # 输出[1, 2, 3, 4, 5] if __name__ __main__: test_quick_sort()方法原地快速排序# 原地快速排序 def quick_sort_in_place(arr, low0, highNone): if high is None: high len(arr) - 1 if low high: # 分区返回基准元素的位置 pivot_idx partition(arr, low, high) # 递归地对左半部分进行排序 quick_sort_in_place(arr, low, pivot_idx - 1) # 递归地对右半部分进行排序 quick_sort_in_place(arr, pivot_idx 1, high) return arr # 分区函数 def partition(arr, low, high): # 选择基准元素这里选择最后一个元素 pivot arr[high] # i 是小于基准元素的区域的边界 i low - 1 # 遍历数组将小于基准元素的元素移到左边 for j in range(low, high): if arr[j] pivot: i 1 arr[i], arr[j] arr[j], arr[i] # 将基准元素移到正确的位置 arr[i 1], arr[high] arr[high], arr[i 1] return i 1 # 测试 def test_quick_sort_in_place(): arr [64, 34, 25, 12, 22, 11, 90] print(quick_sort_in_place(arr)) # 输出[11, 12, 22, 25, 34, 64, 90] arr [5, 4, 3, 2, 1] print(quick_sort_in_place(arr)) # 输出[1, 2, 3, 4, 5] arr [1, 2, 3, 4, 5] print(quick_sort_in_place(arr)) # 输出[1, 2, 3, 4, 5] if __name__ __main__: test_quick_sort_in_place()测试用例测试用例 1基本情况输入[64, 34, 25, 12, 22, 11, 90]输出[11, 12, 22, 25, 34, 64, 90]测试用例 2逆序数组输入[5, 4, 3, 2, 1]输出[1, 2, 3, 4, 5]测试用例 3已排序数组输入[1, 2, 3, 4, 5]输出[1, 2, 3, 4, 5]总结快速排序是一种高效的排序算法它通过分治的思想将数组分成两部分左边的元素都小于基准元素右边的元素都大于基准元素然后递归地对左右两部分进行排序。快速排序的平均时间复杂度为 O(n log n)但最坏情况下时间复杂度为 O(n²)。快速排序的核心思想是选择一个基准元素将数组分成两部分左边的元素都小于基准元素右边的元素都大于基准元素然后递归地对左右两部分进行排序。掌握快速排序的原理和实现对于理解分治算法的思想非常重要。

相关文章:

LeetCode 快速排序题解

LeetCode 快速排序题解 题目描述 实现快速排序算法,对一个整数数组进行排序。 示例: 输入:[64, 34, 25, 12, 22, 11, 90]输出:[11, 12, 22, 25, 34, 64, 90] 解题思路 方法:快速排序 思路: 快速排序的核心思…...

微信聊天记录永久保存:三步导出完整指南

微信聊天记录永久保存:三步导出完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg 你是…...

DownKyi哔哩下载姬:免费高效的B站视频下载终极解决方案

DownKyi哔哩下载姬:免费高效的B站视频下载终极解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...

IDM无限试用完整指南:彻底解决30天限制的终极方案

IDM无限试用完整指南:彻底解决30天限制的终极方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否正在为IDM(Internet Download Manager)的…...

专业级文件校验工具实战指南:3分钟掌握Windows右键菜单完整解决方案

专业级文件校验工具实战指南:3分钟掌握Windows右键菜单完整解决方案 【免费下载链接】HashCheck HashCheck Shell Extension for Windows with added SHA2, SHA3, and multithreading; originally from code.kliu.org 项目地址: https://gitcode.com/gh_mirrors/h…...

大厂Java面试实录:从Spring Cloud微服务到Redis缓存穿透,谢飞机如何翻车

大厂Java面试实录:从Spring Cloud微服务到Redis缓存穿透,谢飞机如何翻车 前言 在互联网大厂Java求职面试中,面试官往往通过层层递进的方式考察候选人的技术深度和广度。本文以电商支付金融场景为背景,记录了一次真实的面试过程——…...

Windows 11任务栏歌词插件:让桌面听歌体验焕然一新

Windows 11任务栏歌词插件:让桌面听歌体验焕然一新 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 还在为听歌时频繁切换窗口…...

AJ-Captcha行为验证码技术架构深度解析:构建智能人机识别系统的实践指南

AJ-Captcha行为验证码技术架构深度解析:构建智能人机识别系统的实践指南 【免费下载链接】captcha 行为验证码(滑动拼图、点选文字),前后端(java)交互,包含h5/Android/IOS/flutter/uni-app的源码和实现 项目地址: https://gitcode.com/gh_m…...

PHP 9.0原生协程 vs Swoole vs RoadRunner:性能实测对比(QPS提升327%,内存降低68%)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0原生协程与AI聊天机器人架构演进 PHP 9.0 引入了真正的原生协程支持(via async/await 语法和 Fiber 底层重构),彻底摆脱了依赖扩展(如 Swoole&…...

完整指南:使用YOLOv8构建高效AI瞄准辅助系统

完整指南:使用YOLOv8构建高效AI瞄准辅助系统 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot Sunone Aimbot是一个基于YOLOv8和YOLOv10深度学习模型的开源AI瞄准辅助工具…...

从Laravel Octane到RoadRunner v3:PHP 9.0异步AI服务部署的4层内存泄漏链(含Valgrind检测脚本+修复patch)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0异步编程与AI聊天机器人避坑指南 PHP 9.0 尚未正式发布(截至 2024 年),但其草案已明确将原生协程(async/await)、无锁事件循环&#x…...

【新手攻略】2026年OpenClaw/Hermes Agent京东云8分钟快速部署教程

【新手攻略】2026年OpenClaw/Hermes Agent京东云8分钟快速部署教程。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗?别再…...

C语言新手必看:用辗转相除法(欧几里得算法)求最大公约数,顺便搞定最小公倍数

C语言新手必看:用辗转相除法(欧几里得算法)求最大公约数,顺便搞定最小公倍数 第一次接触算法时,很多人会被各种数学概念和代码实现绕晕。特别是当老师布置"求两个数的最大公约数和最小公倍数"这种题目时&…...

FileRun vs NextCloud:自建网盘二选一?我的真实体验与反向代理配置避坑指南

FileRun vs NextCloud:自建网盘技术选型与高级配置实战 当我们需要在团队或家庭环境中搭建私有云存储时,FileRun和NextCloud总是出现在候选名单的前列。这两个开源解决方案都能提供类似Google Drive的功能,但在实际使用体验、技术架构和扩展性…...

私人自制飞机也能上天?聊聊FAA适航体系下的“另类”实践与启示

私人自制飞机也能上天?FAA适航体系下的创新实践与启示 当大多数人认为飞机制造是波音、空客这类巨头的专利时,美国天空中有超过20%的通航飞机却来自家庭车库和业余爱好者之手。这种看似不可思议的现象背后,是FAA(美国联邦航空管理…...

告别打包烦恼:用Auto.js Pro 9.0.0 + VSCode插件高效开发手机自动化脚本(附Scrcpy投屏技巧)

高效移动自动化开发:Auto.js Pro 9.0.0与VSCode深度整合实战 在移动自动化脚本开发领域,效率瓶颈往往不在于编码本身,而在于繁琐的环境配置、调试流程和打包部署环节。许多开发者在使用Auto.js或Autox.js时,常常陷入反复连接设备、…...

如何在15分钟内为通达信搭建缠论分析系统:ChanlunX自动化缠论插件实战指南

如何在15分钟内为通达信搭建缠论分析系统:ChanlunX自动化缠论插件实战指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX ChanlunX是一款专为通达信软件设计的开源缠论可视化插件&#xff0c…...

PHP 9.0 + RAG + 异步流式响应:三步完成企业级AI客服系统部署(含JWT鉴权+速率限制+审计日志完整配置)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0 异步编程与 AI 聊天机器人如何实现快速接入 PHP 9.0 原生引入了协程调度器(Coroutine Scheduler)与 async/await 语法支持,彻底摆脱了对第三方扩展&#xff…...

3分钟掌握Mermaid图表:告别拖拽式绘图,用代码创作专业图表

3分钟掌握Mermaid图表:告别拖拽式绘图,用代码创作专业图表 【免费下载链接】mermaid Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown 项目地址: https://gitcode.com/GitHub_Trending/me/me…...

PHP 9.0协程调度器深度解密:如何将AI对话延迟从412ms压至≤23ms?

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0协程调度器与AI聊天机器人性能调优全景图 PHP 9.0 引入了原生协程调度器(Coroutine Scheduler),其基于用户态轻量线程与事件驱动内核,为高并发 AI…...

别只盯着VIF>10:多重共线性的3个实战处理策略与误区避坑

别只盯着VIF>10:多重共线性的3个实战处理策略与误区避坑 当你第一次看到回归分析结果中某个变量的VIF值飙升至两位数时,那种手足无措的感觉我太熟悉了。三年前我刚接手一个电商用户价值预测项目时,就曾被"收入"和"消费金额…...

Winhance中文版:简单高效的Windows系统优化管理工具终极指南

Winhance中文版:简单高效的Windows系统优化管理工具终极指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winha…...

Windows 11终极优化神器:Win11Debloat让你的电脑重获新生

Windows 11终极优化神器:Win11Debloat让你的电脑重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...

保姆级教程:在华为SDH设备上配置SNCP相交环保护(附网管截图)

华为SDH设备SNCP相交环保护配置实战指南 在光传输网络领域,SDH(同步数字体系)技术凭借其高可靠性和强大的保护机制,依然是许多运营商和企业网络的核心选择。SNCP(子网连接保护)作为SDH网络中的重要保护方式…...

如何用25个免费Illustrator脚本快速提升300%设计效率:完整指南

如何用25个免费Illustrator脚本快速提升300%设计效率:完整指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否曾在Adobe Illustrator中花费数小时重复同样的操作…...

告别重复敲命令!用MobaXterm宏一键搞定服务器日常巡检(附日志监控宏配置)

告别重复敲命令!用MobaXterm宏一键搞定服务器日常巡检(附日志监控宏配置) 每次登录服务器都要重复输入相同的检查命令?磁盘空间、内存占用、服务状态、日志跟踪...这些日常巡检操作既耗时又容易遗漏关键指标。今天分享一个实战技巧…...

东莞纸托厂哪家口碑好

探寻优质包装:东莞市禾本包装有限公司,环保与专业并重坐落于东莞市茶山镇南塘路11号的东莞市禾本包装有限公司,以其优良的环保理念和专业的设计生产实力,在纸托行业树立了良好的口碑。环境优美,交通便利禾本包装有限公…...

ZIP密码恢复终极指南:3分钟解锁加密文件的神奇工具

ZIP密码恢复终极指南:3分钟解锁加密文件的神奇工具 【免费下载链接】bkcrack Crack legacy zip encryption with Biham and Kochers known plaintext attack. 项目地址: https://gitcode.com/gh_mirrors/bk/bkcrack 你是否曾经因为忘记ZIP文件的密码而无法访…...

【国产化中间件适配黄金法则】:Java应用平滑迁移至东方通、金蝶、普元的5大避坑指南

更多请点击: https://kaifayun.com 第一章:国产化中间件适配的战略认知与迁移全景图 在信创产业加速落地的背景下,国产化中间件适配已从技术选型层面上升为系统性工程战略。它不仅是替换WebLogic、WebSphere等国外商业中间件的简单动作&…...

5分钟掌握libdxfrw:CAD文件处理的终极C++解决方案

5分钟掌握libdxfrw:CAD文件处理的终极C解决方案 【免费下载链接】libdxfrw C library to read and write DXF/DWG files 项目地址: https://gitcode.com/gh_mirrors/li/libdxfrw 你是否曾经为处理CAD文件而烦恼?面对复杂的DXF和DWG格式&#xff0…...