[英]What is wrong with my QuickSort Implementation
我尝试从头顶实现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]+" ");
}
}
}
您所缺少的只是一组用于强制执行操作顺序的括号。 您的错误输出是这样的:
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
因此,现在您的运行时异常已修复,您可以专注于排序逻辑! ;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.