递归冒泡排序异常

时间:2015-02-20 21:18:39

标签: java sorting recursion

我正在尝试编写一个递归冒泡排序方法,但我得到了ArrayIndexOutOfBoundsException: 11。我看不出我做错了什么。

    public static int[] recBubSort(int []arr, int n){
    if(n > arr.length-1){
        return arr;
    }

    if(arr[n] > arr[n+1]){
        swap(arr,n,n+1);
    }
    return recBubSort(arr,n+1);
}

   public static void swap(int arr[], int minPos, int index) {
    //System.out.println("SelectionSort SWAP...");
    int temp = arr[minPos];
    arr[minPos] = arr[index];
    arr[index] = temp;
}

3 个答案:

答案 0 :(得分:5)

您检查n是否不大于最后一个允许的索引(length - 1,但是在下一个if中,您询问的是arr[n+1]

假设您的数组有5个项目。而且您的n是4.您检查过它并且不超过5-1。但是n+1是5,并且没有第5项。

答案 1 :(得分:2)

这一行:

if(arr[n] > arr[n+1]){

您没有检查n+1是否超出范围。您只需检查n是否超出范围。

答案 2 :(得分:1)

ArrayIndexOutOfBoundsException意味着 索引为负数或大于或等于数组的大小。 你可以试试这个..

void bubbleSort (double  array[], int size) 
{
double temp ;
 for (int pass = 1; pass < size; pass++)    
for (int i = 0; i < size – pass; i++)
if (array [i] > array [i+1])
{
temp = array[i] ;
array[i] = array [i+1] ;
array [i+1] = temp ; 
       }
}