java吧 关注:1,247,957贴子:12,729,492
  • 6回复贴,共1

求助 为什么一直显示数组下表越界异常

只看楼主收藏回复

class Quicksort
{
static void qsort(char items[])
{
qs(items, 0, items.length-1);
}
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((items[j]>x) && (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 TestQuickly
{
public static void main(String[] args) throws Exception
{
char a[] = {'d', 'e', 'a', 'c', 'b', 'g', 'f'};
int i;
System.out.println("Original Array:");
for(i=0; i<items.length; i++)
{
System.out.println(a[i]);
}
Quicksort.qsort(a) ;
System.out.println("Sorted array:");
for(i=0; i<items.length; i++)
{
System.out.println(a[i]);
}
}
}


1楼2017-02-04 12:14回复
    有没有好人来解答下


    2楼2017-02-04 12:14
    回复
      就是一个简单的快速排序,找半天找不到问题


      来自Android客户端3楼2017-02-04 12:16
      回复
        while ((items[j] > x) && (j > left))
        j++;
        图不截了,问题在这句
        拿你的例子,初始化的 j 是6,然后满足循环条件,j++
        然后j==7,items[7]这个值是非法的,因为数组长度为7,所以最大应该是items[6]
        所以你这个会出错


        4楼2017-02-04 14:20
        回复
          我尝试着这么改:
          while (i>0&&(items[i] < x) && (i < right))
          i--;
          while (j<items.length-1&&(items[j] > x) && (j > left))
          j++;
          然后死循环了……
          棒棒哒


          5楼2017-02-04 14:24
          收起回复