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

快速排序:pivot为最大元素时报ArrayIndexOutOfBounds,其余场景正常

问题根因

你编写的快速排序分区函数存在边界校验缺失问题:

  • 内层的两个循环没有添加数组下标边界判定逻辑,当pivot为当前处理区间的最大元素时,while (Arr1[i] <= pivot) i++;的判定条件始终成立,i会持续自增直到超出数组合法下标范围,访问Arr1[i]时就会抛出ArrayIndexOutOfBoundsException异常。
  • 你给出的测试用例中pivot取到了数组最大值77,数组内所有元素都满足<=77的条件,i会从初始下标一直累加至超过数组最大合法下标,最终触发越界。

修复方案

给两个内层循环添加上下标边界判定,同时冗余的pivot交换条件判断可以直接移除,修复后的完整代码如下:

public int partition(int [] Arr1, int l, int h) {
    int pivot = Arr1[l];
    int i = l;
    int j = h;
    int temp;
    
    while (i < j) {
        // 新增i <= j的边界判断,避免i越界
        while (i <= j && Arr1[i] <= pivot) i++;
        // 新增i <= j的边界判断,避免j越界
        while (i <= j && Arr1[j] > pivot) j--;
        if(i<j) {
            temp = Arr1[i];
            Arr1[i] = Arr1[j];
            Arr1[j] = temp;
        }
    }
    
    // 外层循环退出时i >= j,直接交换pivot和j位置元素即可,无需额外判断
    temp = Arr1[j];
    Arr1[j] = Arr1[l];
    Arr1[l] = temp;
    
    return j;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:21:00