学习编码,我将参加 2019 年初的新兵训练营,并准备为此做好准备。我有一本 Java 书籍,其中包含以下代码的快速排序算法示例,我直接从书中复制了它,它为我提供了 IndexOutOfBounds 错误。我知道这与正在检查但可能不存在的索引位置有关,但是,我无法确定具体出了什么问题。有什么帮助吗?提前致谢。// Try This 6-3: A simple version of the Quicksort. class Quicksort { // Set up a call to the actual Quicksort method. static void qsort(char items[]) { qs(items, 0, items.length-1); } // A recursive version of Quicksort for characters. private static void qs(char items[], int left, int right) { int i, j; char x, y; i = left; j = right; x = items[(left+right)/2]; do { while((items[i] < x) && (i < right)) i++; while((x < items[j]) && (j > left)) j--; if(i <= j) { y = items[i]; items[i] = items[j]; items[j] = y; i++; j--; } } while(i <= j); if(left < j); qs(items, left, j); if(i < right) qs(items, i, right); }}class QSDemo { public static void main(String args[]) { char a[] = {'d', 'x', 'a', 'r', 'p', 'j', 'i'}; int i; System.out.println("Original array: "); for(i = 0; i < a.length; i++) System.out.print(a[i]); System.out.println(); // now, sort the array Quicksort.qsort(a); System.out.print("Sorted array: "); for(i = 0; i < a.length; i++) System.out.print(a[i]); }}*emphasized text*
2 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
检查函数中的第二个if循环qs(),它检查是否left小于j。您在if语句后添加了分号(可能是意外)。这会导致if无论if条件是否通过,都将执行循环内的语句。
这应该是这样的:
if(left < j) //remove semi-colon which was here qs(items, left, j);
慕田峪4524236
TA贡献1875条经验 获得超5个赞
问题是您;在if语句之后放置了一个,这就是您收到错误的原因。因为;,qs()无论if条件如何都会被调用。
if(left < j); qs(items, left, j); //<------problem ____________^
if(left < j); qs(items, left, j); 应该 if(left < j) qs(items, left, j);
添加回答
举报
0/150
提交
取消
