繁体   English   中英

Java中的Quicksort

[英]Quicksort in Java

我应该在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)); 

}
}

我在打印语句上遇到了一个错误(似乎对它们有很多麻烦),该错误指出上下无法解决为变量。 如何解决它,以便我可以成功打印排序列表?

这是因为您尚未在main方法中定义任何命名为downup变量。 您应该指定值而不是这些名称。

您将索引超出范围,

因为updown未初始化,因此在Java中将它们设为0

所以下降到j

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

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

您的partition方法返回一个int 相反,请更改您的方法主体,使其返回新排序的数组(并确保您也更改了方法声明中的返回类型,否则会得到错误)。 此外,您需要定义updownmain方法。

例如:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM