学习编码之后,我将在2019年初参加新手训练营,并为它做准备。我有一本Java书,其中包含以下代码,作为quicksort算法的示例,我直接从书中复制了该书,它为我提供了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*
答案 0 :(得分:1)
问题是您在;
语句后放置了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);
答案 1 :(得分:1)
检查if
函数中的第二个qs()
循环,在此循环中检查left
是否小于j
。在if
语句之后添加了分号(可能是偶然的)。这将导致要在if
循环内执行的语句无论是否通过if
条件都将被执行。
这里应该是:
if(left < j) //remove semi-colon which was here
qs(items, left, j);