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

Java快速排序实现遭遇IndexOutOfBoundsException,求排查帮助

快速排序实现的IndexOutOfBoundsException问题修复

核心错误分析

1. swap方法完全无效

Java是值传递,你写的swap(int a, int b)只是交换了方法参数的副本,原数组里的元素根本不会有任何变化。比如swap(arr[l], arr[h])执行后,arr[l]和arr[h]的值还是原样,这会直接导致partition逻辑混乱,进而引发后续越界。

2. 递归参数与数组拆分逻辑错误

你错误地将原数组拆分成left、right新数组,但递归调用时传入的索引完全不符合新数组的范围:

  • 调用quickSort(left,0,j)时,left数组的长度是j,最大索引是j-1,但你传入的h参数是j,直接触发IndexOutOfBoundsException。
  • 更关键的是,快速排序的核心是原地排序,拆分新数组完全没必要,而且排序新数组对原数组毫无影响,完全偏离了算法逻辑。

3. partition循环存在越界风险

partition里的do-while循环没有限制i的上限,当所有元素都小于等于pivot时,i会一直递增到h+1,此时访问arr[i]就会超出数组索引范围。

修正后的代码

package qsort;

public class QuickSort {
    
    public static void main(String[] args) {
        int arr[] = {10,16,8,12,15,6,3,9,5,100};
        quickSort(arr,0,(arr.length-1));
        for(int number:arr) {
            System.out.println(number);
        }
    }

    // 原地排序,无需拆分新数组
    public static void quickSort(int[] arr, int l, int h) {
        if(l < h) {
            int j = partition(arr,l,h);
            // 递归排序左半段(l到j-1)和右半段(j+1到h)
            quickSort(arr, l, j-1);
            quickSort(arr, j+1, h);
        }
    }
    
    public static int partition(int[] arr, int l, int h) {
        int pivot = arr[l];
        int i = l;
        int j = h;
        
        while(i < j) {
            // 限制i不超过h,避免越界
            while(i <= h && arr[i] <= pivot) {
                i++;
            }
            // 限制j不小于l,避免越界
            while(j >= l && arr[j] > pivot) {
                j--;
            }
            if(i < j) {
                swap(arr, i, j); // 传入数组和索引,直接修改原数组
            }
        }
        swap(arr, l, j);
        return j;
    }
    
    // 正确的swap方法:操作原数组元素
    public static void swap(int[] arr, int i, int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

关键修正点

  • 修复swap方法:改为接收数组和索引,直接修改原数组元素,确保交换操作生效。
  • 移除多余的数组拆分:采用原地排序的递归逻辑,传入原数组的正确索引范围。
  • 给partition循环添加边界限制:避免i、j超出数组的合法索引范围,彻底解决越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:45:31