快速排序Java。 ArrayIndexOutOfBoundsException异常

时间:2016-12-22 11:06:01

标签: java algorithm data-structures quicksort

我想快速排序算法。我正在学习快速排序算法。

Out:ArrayIndexoutofBoundsException错误。我找不到错误。

我的英语不太好。谢谢。 我该如何解决这个问题?

public class Quickort {
static int partition(int arr[],int left,int right){
    int i=left;
    int j=right;
    int tmp;    
    int pivot=(left/right)/2;
    while(i<=j){
        while(arr[i]<pivot)
            i++;
        while(arr[j]>pivot)
            j--;

        if(i<=j){
        tmp=arr[i];
        arr[i]=arr[j];
        arr[j]=tmp;
        i++;
        j--;
        }
     }
    return i;
}
static void quicksort(int arr[],int left,int right){
int index=partition(arr,left,right);

if(left<index-1)
    quicksort(arr, left, index-1);
if(index<right)
quicksort(arr, index, right);


}


public static void main(String[] args) {
    int [] arr={8,4,1,7,9,4,3,2,5};
    quicksort(arr,0,arr.length-1);


}

}

3 个答案:

答案 0 :(得分:1)

int pivot=(left/right)/2;更改为int pivot=(left+right)/2;

答案 1 :(得分:1)

根据您的代码

  int pivot=(left/right)/2;

您将获得零轴。并且因为这个循环

while(arr[j]>pivot)
        j--;

j变为-1,并且由于数组不包含此内容,因此抛出ArrayIndexoutofBoundsException

答案 2 :(得分:1)

pivot变量的值应该是数组中的一个元素(int pivot = arr [right];)。

试试这个:

static int partition(int arr[], int left, int right) {
    int pivot = arr[right];
    int i = left - 1;
    int tmp;
    for (int j = left; j <= right; j++) {
        if (arr[j] <= pivot) {
            i++;
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }
    return i;
}

static void quicksort(int arr[], int left, int right) {
    if(left < right){
        int index = partition(arr, left, right);
        quicksort(arr, left, index - 1);
        quicksort(arr, index + 1, right);
    }
}
相关问题