CLRS算法的Quicksort实现中的例外

时间:2015-09-09 19:09:25

标签: java sorting quicksort

我正在尝试在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 ;
    }

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;
}