Java中的Quicksort

时间:2012-02-01 22:50:55

标签: java quicksort

我应该在java中做一个快速排序算法来排序数组{50,20,65,30,75,25,90}。以下是我到目前为止的情况:

public class QuickSort {
public static int partition(int arrayName[], int down, int up){
    int i = down, j = up;
    int temp;
    int pivot = arrayName[(down + up) / 2];

    while (i <= j){
        while (arrayName[i] < pivot)
            i++;
        while (arrayName[j] > pivot)
            j--;
        if (i <= j){
            temp = arrayName[i];
            arrayName[i] = arrayName[j];
            arrayName[j] = temp;
            i++;
            j--;

        }
    }
    return i;

}
public static void main(String[] args) {
    int [] arrayName = {50, 20, 65, 30, 75, 25, 90};

    System.out.println(partition(arrayName, down, up)); 

}
}

我在print语句中遇到错误(似乎有很多问题),说明向下和向上无法解析为变量。如何修复它以便我可以成功打印排序列表?

3 个答案:

答案 0 :(得分:6)

这是因为您没有在down方法中定义任何名为upmain的变量。您应该指定值而不是那些名称。

答案 1 :(得分:0)

你的索引超出范围,

因为updown未初始化,而在java中它使0

所以下降到j

while(arrayName[j]<pivot){ //<--- this will thow exception as j starts at 0
  j--;

导致-1并且访问arrayName[-1]处的数组超出范围。

答案 2 :(得分:0)

您的partition方法会返回int。相反,更改您的方法体,以便它返回新排序的数组(并确保您也在方法声明中更改返回类型,否则您将收到错误)。此外,您需要在up方法中定义downmain

例如:

public static int[] partition(...)
{
...
return arrayname;
}

编辑:此外,您可能需要使用Arrays.toString()来正确输出数组(自从我使用Java以来​​已经有一段时间了)。例如:

System.out.println(Arrays.toString(partition(arrayName, up, down)));