【发布时间】:2014-06-26 13:16:31
【问题描述】:
我已经编写了快速排序的代码,但它显示异常数组索引超出范围。这在用 C 编写时可以正常工作,但在 Java 中它不起作用。请告诉它有什么问题。感谢任何建议。它是双向划分标准 CLRS 算法。
package Sorting;
public class QuickSort {
public static void main(String arg[]) {
int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
Sort(a, 0, a.length - 1);
for (int i = 0; i < 9; i++) {
System.out.print(" " + a[i]);
}
}
private static void Sort(int[] a, int i, int j) {
// TODO Auto-generated method stub
if (i < j) {
int k = Partition(a, i, j);
Sort(a, i, k - 1);
Sort(a, k + 1, j);
}
}
private static int Partition(int[] a, int i, int j) {
// TODO Auto-generated method stub
int temp;
int x = a[j];
int l = i - 1;
for (int n = i; n < j; n++) {
if (a[n] >= x) {
l++;
temp = a[l];
a[l] = a[n];
a[n] = temp;
}
}
temp = a[x];
a[x] = a[l + 1];
a[l + 1] = temp;
return l + 1;
}
}
输出:9 3 5 7 4 1 6 2 8
【问题讨论】:
-
错误出现在哪里?
-
我不想花时间进入这里的逻辑,但错误是在你的分区中的 for 循环中。 for (int n = i; i
-
从表面上看,
Partition是行不通的。请参阅for循环。条件为i < j。i和j的身体都没有变化。一旦执行进入,它就是加利福尼亚酒店:“你可以随时退房,但你永远不能离开。” -
请查看已编辑的问题。
-
@I-LOVE-2-REVIVE 请查看更新后的问题
标签: java sorting data-structures quicksort