You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何估算该快速排序算法的内存占用量?

快速排序内存使用量估算指南

核心分析前提

你的代码实现了尾递归优化的快速排序:每次分区后仅递归处理较小的子数组,较大的子数组通过while循环迭代处理,这会大幅降低递归栈的最大深度,是估算的关键。

步骤1:计算单个递归栈帧的大小

递归栈中的每个帧对应一次quickSort函数调用,我们统计其参数与局部变量的内存占用(按主流64位系统为例,32位系统可类比换算):

  • 参数:
    • int arr[]:本质是指针,占8字节
    • int low/int high:各4字节,共8字节
    • 3个long long&引用:每个引用是指针,各8字节,共24字节
  • 局部变量:int pi,占4字节
  • 内存对齐后(通常按8字节对齐),单个栈帧总大小约为48字节(未对齐时为44字节,估算时取对齐后值更准确)

32位系统下,指针/引用占4字节,单个栈帧对齐后约为32字节(未对齐28字节)。

步骤2:确定递归最大深度

由于小分区优先递归的优化,递归深度的最坏情况为O(log₂n)(n为数组元素个数),即每次递归的子数组大小最多为原数组的1/2,直到子数组长度为1。对应各数组的最大深度:

  • 50k元素:log₂(50000)≈15.6 → 向上取整为16层
  • 100k元素:log₂(100000)≈16.6 → 向上取整为17层
  • 150k元素:log₂(150000)≈17.2 → 向上取整为18层
  • 200k元素:log₂(200000)≈17.6 → 向上取整为18层

步骤3:计算总递归栈内存

单个栈帧大小 × 最大递归深度,结果如下:

64位系统

  • 50k数组:16 × 48 = 768字节(≈0.75KB)
  • 100k数组:17 × 48 = 816字节(≈0.8KB)
  • 150k数组:18 × 48 = 864字节(≈0.84KB)
  • 200k数组:18 × 48 = 864字节(≈0.84KB)

32位系统

  • 50k数组:16 × 32 = 512字节
  • 100k数组:17 × 32 = 544字节
  • 150k数组:18 × 32 = 576字节
  • 200k数组:18 × 32 = 576字节

与数组内存的对比

int类型占4字节,各数组的内存占用为:

  • 50k:50000×4=200000字节(≈195KB)
  • 100k:100000×4=400000字节(≈391KB)
  • 150k:150000×4=600000字节(≈586KB)
  • 200k:200000×4=800000字节(≈781KB)

显然,递归栈的内存占用远小于数组本身的内存,完全符合“计算结果不应超过数组维度”的要求。

内容的提问来源于stack exchange,提问作者deynchik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:34:51