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

JavaScript快速排序Partition函数数组传递与修改问题咨询

为什么Partition函数没返回数组,但原数组却被修改了?

这其实是JavaScript中引用类型传递的核心特性在起作用,我来给你拆解清楚:

核心原因:数组是引用类型

在JavaScript里,数组属于引用类型。当你把数组作为参数传给函数时,传递的并不是数组的完整副本,而是指向该数组在内存中实际存储位置的引用指针。这就意味着:

  • 函数内部对这个参数的任何修改,都会直接作用于内存里的原数组对象
  • 不管函数有没有返回这个数组,外部的原数组都会同步发生变化

结合你的代码具体分析

咱们对着你的代码一步步看:

  1. 当你调用Partition(arr, start, end)时,arr参数拿到的是原数组的引用,不是新创建的数组副本
  2. 在Partition的循环里,每次调用swap(arr, x, partitionIndex),swap函数直接通过引用操作原数组的元素位置:
    function swap(arr,firstIndex,secondIndex){
        var temp = arr[firstIndex];
        arr[firstIndex] = arr[secondIndex];
        arr[secondIndex] = temp;
    }
    
    这里的arr[firstIndex]和arr[secondIndex]都是直接修改原数组的元素,没有创建任何新数组。
  3. 所以哪怕Partition只返回了partitionIndex,它内部的所有交换操作已经直接改变了原数组的内容。

极简示例辅助理解

用一个更简单的例子帮你强化这个概念:

function modifyArray(arr) {
  arr[0] = "我被修改了";
}

let myArr = [1, 2, 3];
modifyArray(myArr);
console.log(myArr); // 输出: ["我被修改了", 2, 3]

这个例子里函数也没有返回数组,但原数组依然被修改了,和你的快速排序代码逻辑完全一致。

补充:QuickSort返回arr的作用

你的QuickSort函数最后返回arr,其实只是把同一个引用返回出去而已——因为原数组已经被排序完成了,返回它只是方便你直接打印或者后续使用,就算去掉return arr,原数组也已经是排序后的状态了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:01