簡體   English   中英

QuickSort:此實現有什么問題

[英]QuickSort: what is wrong with this implementation

您能解釋一下Java中這種quicksort算法實現的問題嗎?

static ArrayList<Integer> quickSort(ArrayList<Integer> array){

    if (array.size() <=1){
        ArrayList<Integer> a = new ArrayList<Integer>();

        return a;
    }

    int pivotIndex = array.size() / 2;

    int pivot = array.get(pivotIndex);
    ArrayList<Integer> left= new ArrayList<Integer>();
    ArrayList<Integer> right = new ArrayList<Integer>();

    for (int i = 0; i < array.size(); i++) {
        if (i!=pivotIndex){
        if (array.get(i) > pivot)
            right.add(array.get(i));
        else
            left.add(array.get(i));
        }

    }
    ArrayList<Integer> l = new ArrayList<Integer>();
    l.addAll(quickSort(left));
     l.add(pivot);
     l.addAll(quickSort(right)); 

    return l;

}

一個明顯的錯誤是大小為1的數組未正確處理。 正確設置此點很重要,因為這是遞歸的基本情況之一。

代替

if (array.size() <=1) {
    ArrayList<Integer> a = new ArrayList<Integer>();

    return a;
}

采用

   if (array.size() <=1){
   return array
}

該算法的主要問題-您正在為函數的每次調用創建新的ArrayList。 這樣,您就可以使有關QuickSort的最好的東西無效-無需任何額外的內存就位排序。 嘗試僅使用第一個給定的數組

暫無
暫無

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

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