簡體   English   中英

我的Quicksort算法運行太慢

[英]My Quicksort algorithm is running too slow

我正在使用Quicksort算法對32位隨機整數進行排序。 當我對10或100或1000個元素進行排序時,算法可以快速運行,但是當我選擇n = 10.000時,排序大約需要15分鍾。 我想將n增加到10000000,但是算法將永遠花費。 我找不到實施中的問題。

這是我的主要功能

 public static void main(String[] args) {

    for(int i=0; i<100; i++){

    Random rand = new Random(new Date().getTime()); //different seed for each run

    createRandArray(rand);  
    long startTime= System.nanoTime();
    sort();
    long finishTime= System.nanoTime();
    }

這是Quicksort的實現

  public static void sort(){
        int left = 0;
        int right = my_array.length-1;
        quickSort(left, right);
    }

    private static void quickSort(int left,int right){

        if(left >= right)
            return;

        BigInteger pivot = my_array[right];
        int partition = partition(left, right, pivot);

        quickSort(0, partition-1);
        quickSort(partition+1, right);

    }

    private static int partition(int left,int right,BigInteger pivot){
        int leftCursor = left-1;
        int rightCursor = right;

        while(leftCursor < rightCursor){

                while(my_array[++leftCursor].compareTo(pivot)==-1);
                while(rightCursor > 0 && my_array[--rightCursor].compareTo(pivot)==1);

            if(leftCursor >= rightCursor){
                break;
            }
            else{
                swap(leftCursor, rightCursor);
            }
        }

        swap(leftCursor, right);
        return leftCursor;
    }

    public static void swap(int left,int right){

        BigInteger temp = my_array[left];
        my_array[left] = my_array[right];
        my_array[right] = temp;
    }

這就是我創建32位rand整數數組的方式

 public static void createRandArray(Random rand ){

        BigInteger big_int=new BigInteger("1"); //initialization

        for(int i=0; i<100 ; i++){
        big_int= new BigInteger(32, rand);
        my_array[i]= big_int;
    }
}

任何幫助將不勝感激。

您錯誤地認為下限是零,而不是left在幾個地方,因此您做的工作比需要做的要多:

quickSort(int left,int right)

quickSort(0, partition-1);

quickSort(left, partition-1);

並在partition(int left,int right,BigInteger pivot)

while(rightCursor > 0 && my_array[--rightCursor].compareTo(pivot)==1);

while(rightCursor > left && my_array[--rightCursor].compareTo(pivot)==1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM