簡體   English   中英

Java中的隨機快速排序是否需要Suble修復?

[英]randomized quick sort in Java need a suble fix?

我已經實現了quicksort算法,該算法將列表的第一個元素用作數據透視,並且效果很好。 現在,我refactored為選擇一個隨機索引作為樞軸元素,與第一個元素交換並執行quicksort子例程。 以某種方式,它不起作用,我沒有得到排序的數組。 這是我的代碼,這是不言自明的,但是我很高興解釋是否需要任何澄清。

public class Qsort {
       public static void quickSort2(int[] arr, int i, int j){
        if (i<j){
            int part =randPartition(arr, i, j);
            quickSort2(arr, i, part-1);
            quickSort2(arr, part+1, j); 
        }
    }
    public static int randPartition(int[] arr, int start, int end){
        //int pivId = (int)(Math.random()*(end-start)+1)+start; -- *****
        int pivId = start;
        //System.out.println("pivId is "+ pivId + "; start is " + start + "; end is " + end);
        System.out.println("arr is "+ Arrays.toString(arr));
        int pivot = arr[pivId];
        swap(arr, start, pivId);
        int i = start;

        for (int j = start+1;j<=end;j++){
            if (arr[j]<pivot){
                    i++;
                    swap(arr,i,j);
            }
        }
        swap(arr, start,i);
        return i;
    }

   private static void swap(int[] arr, int index1, int index2) {
        int temp = arr[index1];
        arr[index1]=arr[index2];
        arr[index2]=temp;
    }

   public static void main(String[] args) {
        int[] data2 = new int[]{10,11,9,7,5};
        System.out.println("Unsorted array data " + Arrays.toString(data2));
        quickSort2(data2, 0, data.length-1);
        System.out.println("Sorted array data " + Arrays.toString(data2));
      }
}

我已經random pivot calculation in the code with *****注釋掉了random pivot calculation in the code with *****random pivot calculation in the code with ***** 我看不到任何問題,但是進行隨機樞軸計算會破壞代碼

您的其余代碼還可以,但是

int pivId = (int)(Math.random()*(end-start)+1)+start; -- *****

有一些問題。 考慮end == start,然后得到pivID == 1 + start。

暫無
暫無

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

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