繁体   English   中英

快速排序Java。 ArrayIndexoutofBoundsException

[英]Quick Sort Java . ArrayIndexoutofBoundsException

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

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);


}

}

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

根据你的代码

  int pivot=(left/right)/2;

您将获得零轴。 由于这个循环

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

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

变量的值应该是数组中的一个元素(整数= 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM