Quicksort IndexOutOfBounds

时间:2014-10-14 17:43:55

标签: java algorithm

我参加了一些编程课程,我想知道是否可以获得我的Quicksort算法项目的帮助。

以下是我提出的代码:

public class QuickSort {

    public static void main(String[] args) 
    {       
        int array [] = {12, 25, 17, 19, 51, 32, 45, 18, 22, 37, 15};

        quickSorting(array);

        System.out.printf("The sorted array is: ", array);
    }

    public static void quickSorting(int array[])
    {
        int pivot = array[0];
        int i = pivot + 1;
        int j = array.length;

        while(i >= j)
        {
            while(array[i] <= pivot)
                i++;
            while(array[j] >= pivot)
                j--;

            swapValues(array[i] , array[j]);
        }   

        swapValues(array[i] , array[j]);
        swapValues(array[pivot], array[j]);
    }

    public static void swapValues(int a, int b)
    {
        int temporary = a;
        a = b;
        b = temporary;
    }
}

我不断收到数组越界错误。

3 个答案:

答案 0 :(得分:0)

问题在于:

    int pivot = array[0];
    int i = pivot + 1;

array [0] = 12 =&gt;我= 13;

现在,while(array[i] < pivot) =&gt; [i]不能是13岁。

你可能意味着pivot = 0;array[0]意味着取值,这是错误的。

答案 1 :(得分:0)

首先,交换函数由值调用,而不是通过引用调用。因此,不交换数组中的实际元素。请将实现更改为

public static void swap(int array[], int i, int j) {
     int temp = array[i];
     array[i] = array[j];
     array[j] = temp;
}

接下来检查&#39; i&#39;和&#39; j&#39;为了正确,数组已经排序。

我认为这应该可以解决问题。

答案 2 :(得分:0)

正如Parth指出的那样, 你错过了把它放回阵列。你交换了它,但如果你的数组没有反映出来,那么重点是什么?

如果您的原始数组是一个对象数组而不是基本类型(示例整数[]),那么它对您来说效果会很好。