我的QuickSort实施有什么问题

时间:2017-02-11 00:11:51

标签: java algorithm sorting quicksort

我尝试将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]+" ");
     }
    }
}

1 个答案:

答案 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 

现在您的运行时异常已修复,您可以专注于排序逻辑! ;-)