为了账号安全,请及时绑定邮箱和手机立即绑定

快速排序 - 线程“main”中的异常 java.lang.ArrayIndexOutOf

快速排序 - 线程“main”中的异常 java.lang.ArrayIndexOutOf

呼唤远方 2021-12-30 16:36:49
学习编码,我将参加 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);


查看完整回答
反对 回复 2021-12-30
?
慕田峪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);


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号