Java中的快速排序

Java中的快速排序,java,quicksort,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 &

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

}
}
公共类快速排序{
公共静态int分区(int-arrayName[],int-down,int-up){
int i=向下,j=向上;
内部温度;
int pivot=arrayName[(向下+向上)/2];
而(我)
j--;

如果(i这是因为您没有在
main
方法中定义任何名为
down
up
的变量。您应该指定值而不是这些名称。

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

你的索引越界了

因为
up
down
是未初始化的,在java中,这使得它们
0

因此,在
j

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

while(arrayName[j]您的索引越界

因为
up
down
是未初始化的,在java中,这使得它们
0

因此,在
j

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

while(arrayName[j]您的
分区
方法返回一个
int
。相反,请更改您的方法体,使其返回新排序的数组(并确保您也更改了方法声明中的返回类型,否则会出现错误)。此外,您需要在
main
方法中定义
up
down

例如:

public static int[] partition(...)
{
...
return arrayname;
}
编辑:此外,您可能需要使用
Arrays.toString()
来正确输出数组(我已经有一段时间没有使用Java了)。例如:


System.out.println(Arrays.toString(partition(arrayName,up,down));
您的
分区
方法返回一个
int
。相反,请更改方法体,使其返回新排序的数组(并确保您也更改了方法声明中的返回类型,否则会出错)。此外,您需要在
main
方法中定义
up
down

例如:

public static int[] partition(...)
{
...
return arrayname;
}
编辑:此外,您可能需要使用
Arrays.toString()
来正确输出数组(我已经有一段时间没有使用Java了)。例如:


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

错误是什么?您在那一行得到了一个错误,因为变量“down”和“up”没有在类的静态范围中定义。它们只在“partition”中定义方法。您需要将实际值传递给该方法,或者在名为“down”和“up”的“main”方法中定义局部变量。在键入“I get a error”或“I get a exception”后,您的手指要做的第一件事就是就是开始键入您收到的确切错误消息,以及任何其他信息,如行号或内存地址。如果您不这样做,其他人将更难发现您代码中的错误,而我们将更难让您获得答案。请记住,我们看不到您的屏幕或无法读懂您的心思从这里开始;如果您向我们提供信息就容易多了。:)您是对的。我的错。我没有真正思考。我编辑了我的OP来解决这个问题。错误是什么?您在那一行得到了一个错误,因为变量“down”和“up”没有在类的静态范围中定义。它们只在“partition”中定义方法。您需要将实际值传递给该方法,或者在名为“down”和“up”的“main”方法中定义局部变量。在键入“I get a error”或“I get a exception”后,您的手指要做的第一件事就是就是开始键入您收到的确切错误消息,以及任何其他信息,如行号或内存地址。如果您不这样做,其他人将更难发现您代码中的错误,而我们将更难让您获得答案。请记住,我们看不到您的屏幕或无法读懂您的心思从这里开始;如果您向我们提供信息,会容易得多。:)你是对的。我的错。我没有真正思考。我编辑了我的OP来解决这个问题。这在Java中不是必需的;语言和库将为你处理这个问题。这在Java中不是必需的;语言和库将为你处理这个问题。我不认为这解决了问题。即使方法返回int,它也会对引用执行排序数组的ce,因此他应该能够在调用分区后打印数组。虽然分区的实现不正确。感谢您的print语句,但是我在尝试使用它时遇到了一个错误。它在toString部分加下划线,并显示:方法toString(long[])在类型中,数组不适用于参数(int)啊,我明白了。那个print语句应该是基于我前面提到的
分区
方法的更改。要解决这个问题,只需从.toString方法中删除方法调用,而只需将
arrayName
System.out.println(Arrays.toString(arrayName))的实例放进去它抛出错误的原因是因为你的
分区
方法返回一个int,其中
数组。toString
需要一个数组。希望这有帮助。我不认为这能解决问题。即使该方法返回int,它也会对数组的引用执行排序,因此他应该能够在已调用分区。虽然分区的实现不正确。感谢您提供的print语句,但是我在尝试使用它时遇到了一个错误。它在toString部分加下划线,并表示:类型数组中的方法toString(long[])不适用于参数(int)啊,我明白了。那个print语句应该是基于我前面提到的
分区
方法的更改。要解决这个问题,只需删除方法调用f