我尝试将QuickSort从头顶开始练习,但是我在编译期间遇到了异常:6。我以为我正确地使用了setter方法来分配数组,但似乎还有一些问题......
以下是我的代码:
public class MyClass {
private int array[];
public void setArray(int[] arr){
this.array=arr;
quickSort(0,array.length-1);
}
private int length;
private void quickSort(int lowIndex, int highIndex){
int pivot = array[lowIndex+(highIndex-lowIndex/2)]; // our pivot
int i = lowIndex;
int j = highIndex;
while(i<=j){
while(array[i]<pivot){
i++;
}
while(array[j]>pivot){
j--;
}
if(i<=j){
int temp = array[i];
array[j] = array[i];
array[i] = temp;
i++;
j--;
}
}
if(lowIndex<j){
quickSort(lowIndex, j);
}
if(highIndex>i){
quickSort(i, highIndex);
}
}
public static void main(String[] args) {
int[] array2 = {2,45,96,1,16};
MyClass b = new MyClass ();
b.setArray(array2);
for(int x=0;x<array2.length;x++){
System.out.print(array2[x]+" ");
}
}
}
答案 0 :(得分:0)
您缺少的是一组用于执行操作顺序的括号。您的错误输出是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at MyClass.quickSort(MyClass.java:12)
at MyClass.quickSort(MyClass.java:35)
at MyClass.setArray(MyClass.java:6)
at MyClass.main(MyClass.java:45)
您需要解决的问题是如下更正第12行:
int pivot = array[lowIndex+((highIndex-lowIndex)/2)]; // our pivot
^ ^
现在你的运行输出应该是:
2 45 96 96 96
现在您的运行时异常已修复,您可以专注于排序逻辑! ;-)