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

LeetCode 快速排序 题解

LeetCode 快速排序 题解

题目描述

实现快速排序算法,对一个整数数组进行排序。

示例 1:

输入:nums = [5,2,3,1] 输出:[1,2,3,5]

示例 2:

输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5]

解题思路

方法:快速排序

思路

  • 快速排序是一种分治算法,它的工作原理是:选择一个基准元素,将数组分成两部分,小于基准的元素放在左边,大于基准的元素放在右边,然后对左右两部分分别进行快速排序。
  • 快速排序的过程是递归的,它不断地将数组分成更小的子数组,直到子数组的长度为 1。

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是数组的长度。最坏情况下,时间复杂度为 O(n²),但平均情况下是 O(n log n)。
  • 空间复杂度:O(log n),需要使用递归栈空间。

代码实现

方法:快速排序

def quick_sort(nums): # 调用辅助函数 quick_sort_helper(nums, 0, len(nums) - 1) return nums def quick_sort_helper(nums, left, right): # 递归终止条件 if left < right: # 分区操作,返回基准元素的位置 pivot_idx = partition(nums, left, right) # 递归排序左半部分 quick_sort_helper(nums, left, pivot_idx - 1) # 递归排序右半部分 quick_sort_helper(nums, pivot_idx + 1, right) def partition(nums, left, right): # 选择最右边的元素作为基准 pivot = nums[right] # 初始化指针 i i = left - 1 # 遍历数组 for j in range(left, right): # 如果当前元素小于基准,交换元素并移动指针 i if nums[j] < pivot: i += 1 nums[i], nums[j] = nums[j], nums[i] # 将基准元素放到正确的位置 nums[i + 1], nums[right] = nums[right], nums[i + 1] # 返回基准元素的位置 return i + 1 # 测试 nums1 = [5,2,3,1] print(quick_sort(nums1)) # 输出:[1,2,3,5] nums2 = [5,1,1,2,0,0] print(quick_sort(nums2)) # 输出:[0,0,1,1,2,5]

测试用例

测试用例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]

测试用例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

总结

本题是排序算法的经典问题,主要考察对快速排序算法的理解和实现。快速排序是一种分治算法,它通过选择基准元素,将数组分成两部分,然后对左右两部分分别进行快速排序来完成排序。

快速排序的核心思想是:选择一个基准元素,将数组分成两部分,小于基准的元素放在左边,大于基准的元素放在右边,然后递归地对左右两部分进行排序。

这种方法的平均时间复杂度为 O(n log n),是一种不稳定的排序算法,适用于大规模数据的排序。掌握快速排序的原理,对于理解分治算法和递归思想非常重要。

http://www.jsqmd.com/news/658097/

相关文章:

  • 2026年4月上海茅台回收服务商综合评估与选购指南 - 2026年企业推荐榜
  • 2026年当下,谁在引领宁波防腐工程行业新格局? - 2026年企业推荐榜
  • 2026年4月沧州地区专业杂技表演团队甄选指南与深度测评 - 2026年企业推荐榜
  • 2026现阶段霸州火锅桌椅批发市场解析与核心厂家深度推荐 - 2026年企业推荐榜
  • 2025届最火的十大AI科研方案实际效果
  • 揭秘Windows风扇控制神器:FanControl让你的电脑散热静如处子
  • 2026年4月河南标准件采购指南:五家核心供应商深度解析与选型策略 - 2026年企业推荐榜
  • 2026年4月浙江紧固件采购决策指南:河北仁鑫紧固件制造有限公司的竞争力剖析 - 2026年企业推荐榜
  • Boost电路PI参数调不好?试试这份基于频域分析的MATLAB调试指南与避坑清单
  • 2025最权威的AI辅助论文工具解析与推荐
  • 2026年至今湖南短视频运营服务商全景解析:五大靠谱团队推荐 - 2026年企业推荐榜
  • 如何快速实现Windows AirPlay 2接收器:终极免费解决方案
  • 2026年近期浙江企业如何选择高性价比热镀锌螺栓服务商?这份测评报告给你答案 - 2026年企业推荐榜
  • 2026年4月更新:石家庄桥西区出国留学申请机构如何精准选择 - 2026年企业推荐榜
  • Windows和Office激活终极指南:3步完成智能激活,告别激活烦恼
  • 人工智能 第一章:什么是人工智能?——从定义到大众认知-误区
  • D3KeyHelper:暗黑破坏神3终极自动化助手完整配置指南
  • 别让虚拟皮肤掏空你的真实生活——写给每一位大学生的消费觉醒书
  • 2026年4月合肥公考培训市场深度测评:五家高性价比机构全解析 - 2026年企业推荐榜
  • 2026年近期霸州火锅桌椅优质厂家评选:口碑前五强深度解析与采购建议 - 2026年企业推荐榜
  • 如何快速配置微信支付证书:3步完成自动化下载与解密
  • 当SPI遇上ESP32:实战配置CPOL和CPHA驱动WS2812B LED灯带(附常见通信失败排查)
  • PEG-PMMA-Fe₃O₄ NPs,PEG-PMMA修饰四氧化三铁纳米颗粒,性状与结构特点
  • 避坑指南:瑞萨e2studio中DTC地址绑定的那些坑——以RA2E1内存操作为例
  • 工业数据融合架构:Apache PLC4X在现代化工厂系统集成中的应用范式
  • Cursor AI 完全解锁指南:3大核心技巧免费畅享Pro功能
  • 杰理之linein复用CMD检测配置【篇】
  • 2025-2026年儿童康复机构评测:五家口碑服务推荐评价领先注意力缺陷多动障碍行为矫正注意事项 - 品牌推荐
  • golang如何使用OpenTelemetry链路追踪_golang OpenTelemetry链路追踪使用方法
  • Cortex-M3软核在Artix-7上的实战:如何用SWD接口实现高效调试与性能优化