我正在尝试在 Java 中实现快速排序的 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
知道我做错了什么吗?
最佳答案
for(j = start; j < end - 1; j++)
应该是for(j = start; j < end; j++)
。另一件事是在java中所有的方法和变量都应该以小写字母开头,比如PrintNumbers应该是printNumbers。
当您调用QuickSort
时,您不需要每次都减一。第一次从 main 方法开始。
关于java - 快速排序未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838126/