我想快速排序算法。我正在学习快速排序算法。
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);
}
}
答案 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);
}
}