news 2026/4/18 0:27:19

LeetCode 快速排序 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),是一种不稳定的排序算法,适用于大规模数据的排序。掌握快速排序的原理,对于理解分治算法和递归思想非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:14:36

如何用roop-unleashed快速制作高质量AI换脸视频:完整入门指南

如何用roop-unleashed快速制作高质量AI换脸视频&#xff1a;完整入门指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 想要在几分钟内制作出专业级AI换脸…

作者头像 李华
网站建设 2026/4/18 0:13:41

D3KeyHelper:暗黑破坏神3终极自动化助手完整配置指南

D3KeyHelper&#xff1a;暗黑破坏神3终极自动化助手完整配置指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为长时间按住旋风斩导致手腕酸痛…

作者头像 李华
网站建设 2026/4/18 0:13:36

Simulink建模进阶:MinMax模块的代码生成与类型陷阱

1. MinMax模块基础与代码生成机制 MinMax模块是Simulink中最常用的基础模块之一&#xff0c;它的功能简单直接——从多个输入中选出最大值或最小值。但正是这种看似简单的功能&#xff0c;在嵌入式代码生成时却藏着不少"暗礁"。我曾在实际项目中因为忽略了这个模块的…

作者头像 李华