我该如何修复我的代码?快速排序填充随机数

时间:2015-11-08 00:54:05

标签: java arrays

我正在使用quicksort编写代码但无法看到它使其正常工作。

我已经将我的数组声明为20并用随机整数填充它。然后我调用了我的sort方法进行快速排序。 show方法只打印输出。我的代码仍然无法正常工作。

我的快速排序代码:

public class JavaApplication3 {
    public static void main(String[] args) {
        QuickSort B = new QuickSort();

        int[] snum = new int [20];
        for(int index = 0; index < snum.length; index++ ){
            snum[index]= (int) (Math.random ());
        } 

        B.sort(snum);
        B.show(snum);     
    }
}

class QuickSort{
    public static void sort(int [] a ){
        quicksort(a, 0, a.length -1);
    }

    private static void quicksort(int[] a, int lo, int hi){
        if(hi <= lo) return;
        int j = partition(a, lo, hi);
        quicksort(a, lo, j-1);
        quicksort(a, j+1, hi);
    }

    private static void exch(int [] a, int i, int j){
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    private static int partition(int[] a, int lo, int hi){
        int i= lo;
        int j = hi+1;
        int pivot = a[lo]; 
        while(i<=j){
            while(a[i] < pivot){
                i++;
            }
            while(a[j] > pivot){
                j--;
            }
            if(i <= j){
                exch(a, i, j);
                i++;
                j--;
            }
        }
        if (lo < j)
            quicksort(a, lo, j);
        if (i < hi)
            exch(a, i, j);

       return j;
    }

    public static void show(int[]a){
        for(int i=0; i<a.length;i++)
            System.out.print(a[i] + " ");
        System.out.println();
    }
  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:   20在javaapplication3.QuickSort.partition(JavaApplication3.java:61)     在javaapplication3.QuickSort.quicksort(JavaApplication3.java:43)at   javaapplication3.QuickSort.sort(JavaApplication3.java:39)at   javaapplication3.JavaApplication3.main(JavaApplication3.java:29)Java   结果:1

2 个答案:

答案 0 :(得分:0)

一个问题是Math.random会生成小于1的小数,当您将其转换为int时,这些数字会导致0.因此将math.random乘以10。

答案 1 :(得分:0)

希望这会有所帮助。

int hoaresPartition(int *arr, int lo, int hi){
    int pivot = arr[lo];
    int i = lo - 1;
    int j = hi + 1;
    while (true){

        do {
            j = j -1;
        }while (arr[j] > pivot);

        do {
            i = i+1;
        }while (arr[i] < pivot);

        if ( i < j){
            int temp;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }else
            return j;
    }
}