我正在尝试在CLRS中给出的QuickSort的实现,但它给出了一个数组索引超出范围的异常。以下是方法。 从main调用Array,随机生成10个元素的数组。
public static String quicky(int[] array, int a, int b)
{
int q ;
if(a<b)
{
q = partition(array,a,b) ; //Exception
System.out.println(q);
quicky(array,a,q-1) ;
quicky(array,q+1,b) ; //Exception
}
return Arrays.toString(array) ;
}
public static int partition(int[] arr, int p, int r)
{
int temp ;
int x = arr[r] ;
int i = p-1 ;
for(int j=0 ; j<arr.length-1 ; j++)
{
if(arr[j]<=x)
{
i++ ;
temp = arr[i] ;
arr[i] = arr[j] ;
arr[j] = temp ;
}
}
temp = arr[i+1] ; //Exception
arr[i+1] = arr[x] ;
arr[x] = temp ;
return i+1 ;
}
答案 0 :(得分:0)
代码中存在一些错误,例如逐个错误和使用的错误变量。尝试:
public static String quicky(int[] array, int a, int b)
{
int q ;
if(a<b)
{
q = partition(array,a,b) ;
quicky(array,a,q-1) ;
quicky(array,q+1,b) ;
}
return Arrays.toString(array) ;
}
public static int partition(int[] arr, int p, int r)
{
int temp ;
int x = arr[r] ;
int i = p-1 ;
for(int j=p ; j<=r-1 ; j++)
{
if(arr[j]<=x)
{
i++ ;
temp = arr[i] ;
arr[i] = arr[j] ;
arr[j] = temp ;
}
}
temp = arr[i+1] ;
arr[i+1] = arr[r] ;
arr[r] = temp ;
return i+1;
}