學習編碼,我將參加 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
提交
取消