java - 快速排序 Java 。 ArrayIndexoutofBoundsException异常

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


}

}

最佳答案

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

关于java - 快速排序 Java 。 ArrayIndexoutofBoundsException异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281701/

相关文章:

php - 如何使用 PHP 和 C 将大图保存在内存中?

data-structures - 使用 Fenwick 树增加范围

java - 查找定位器 Selenium Webdriver - IE8 时遇到问题。无法浏览菜单

java - 如何在使用 ANT 运行类或套件中的所有测试时打印当前正在执行的 JUnit 测试方法?

java - 如何在appium Java IOS中上下左右滑动

java - 如何将下面的android方法转换为递归方法?

c++ - 在 C++ 程序中显示进程完成的百分比

算法计算一组保证赢得比赛的球队

c# - 如何从 C# 中的矩阵获取邻接矩阵

python - CPython 内部结构