算法46,分治快排,排序数组

这段代码实现的是随机化三路快速排序,用来解决 LeetCode 912 题"排序数组"。

代码逻辑解析

  1. 主入口 :sortArray 调用递归排序方法,对整个数组范围 [0, nums.length-1] 进行排序。
  2. 随机选基准值 :int key = nums[new Random().nextInt(r-l+1)+l]; 随机选取当前区间的一个元素作为基准值(pivot),这能有效避免在面对近似有序数组时退化为 O(n2) 的时间复杂度。
  3. 三路划分 :
    • left 指针指向小于基准值的区域的末尾。
    • right 指针指向大于基准值的区域的开头。
    • i 为当前遍历指针。
    • 当 nums[i] < key 时,与 ++left 位置交换,并移动 i。
    • 当 nums[i] == key 时,仅移动 i。
    • 当 nums[i] > key 时,与 --right 位置交换(此时 i 不移动,因为换过来的元素还未处理)。
  4. 递归排序 :经过划分后,区间被分为 [l, left](小于key)、[left+1, right-1](等于key)、[right, r](大于key)。代码递归排序小于和大于基准值的两部分。
  5. 交换辅助函数 :swap 方法用于交换数组中的两个元素。

复杂度分析

  • 时间复杂度 :由于使用了随机选基准值,期望时间复杂度为 O(nlogn),满足题目不使用内置函数且达到 O(nlogn) 的要求。
  • 空间复杂度 :递归调用栈的深度期望为 O(logn),原地交换元素,额外空间复杂度为 O(logn)。
相关推荐
HDU-Dade8 分钟前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
2501_9445215920 分钟前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐2 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾2 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者2 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯2 小时前
啊啊啊啊啊
java·服务器·数据库
小郎君6582 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
SL_staff2 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈
邵奈一3 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS1003 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法