我应该在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语句中遇到错误(似乎有很多问题),说明向下和向上无法解析为变量。如何修复它以便我可以成功打印排序列表?
答案 0 :(得分:6)
这是因为您没有在down
方法中定义任何名为up
和main
的变量。您应该指定值而不是那些名称。
答案 1 :(得分:0)
你的索引超出范围,
因为up
和down
未初始化,而在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
方法中定义down
和main
。
例如:
public static int[] partition(...)
{
...
return arrayname;
}
编辑:此外,您可能需要使用Arrays.toString()
来正确输出数组(自从我使用Java以来已经有一段时间了)。例如:
System.out.println(Arrays.toString(partition(arrayName, up, down)));