[英]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.