我试图在Java中为quicksort实现CLRS伪代码,而且我无法使数组排序正确。我写的代码是:
private void PrintNumbers(int[] numbers) {
for(int number:numbers) {
System.out.print(number + " ");
}
System.out.println("");
}
private void swap(int[] numbers, int i, int j) {
int temp;
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
private int Partition(int[] numbers, int start, int end) {
int i = start - 1;
int wall = numbers[end];
int j;
for(j = start; j < end - 1; j++) {
if(numbers[j] <= wall) {
i++;
swap(numbers, i, j);
}
}
swap(numbers, i+1, end);
return i+1;
}
private void QuickSort(int[] numbers, int start, int end) {
if(start < end) {
int q = Partition(numbers, start, end);
QuickSort(numbers, start, q-1);
QuickSort(numbers, q+1, end);
}
}
public static void main(String[] args) {
int[] numbers = {2, 8, 7, 1, 3, 5, 6, 4};
QS qs = new QS();
qs.QuickSort(numbers, 0, numbers.length-1);
qs.PrintNumbers(numbers);
}
我为该代码获得的输出是:2 3 1 4 5 7 8 6
知道我做错了吗?
答案 0 :(得分:1)
for(j = start; j < end - 1; j++)
应为for(j = start; j < end; j++)
。其他的东西是java中的所有方法和变量应该以小写字母开头,比如PrintNumbers应该是printNumbers。
当你第一次从main方法调用QuickSort
时,你不需要每次减去一个。