簡體   English   中英

我實現QuickSort的問題

[英]Problem with my implementation of QuickSort

我正在嘗試使用我自己的quickSort實現按照擴展名對文件進行排序(如果擴展名是相同的文件名)。

因此,當我對一小組文件進行排序時,它可以正常工作,但是當我使用一個大組時,某些文件會從結果列表中消失。 我無法找到原因。 (排序本身按預期工作......問題僅在於丟失的文件)。 有任何想法嗎?

public static ArrayList<Extention> quickSort(ArrayList<Extention> list)
{
    if (list.size() <= 1)
        return list; // Already sorted

    ArrayList<Extention> sorted = new ArrayList<>();
    ArrayList<Extention> lesser = new ArrayList<>();
    ArrayList<Extention> greater = new ArrayList<>();
    Extention pivot = list.get(list.size()-1);
    for (int i = 0; i < list.size()-1; i++)
    {
        //int order = list.get(i).compareTo(pivot);
        if (list.get(i).getExtention().compareTo(pivot.getExtention()) < 0)
            lesser.add(list.get(i));
        else if (list.get(i).getExtention().compareTo(pivot.getExtention()) == 0){
            if (list.get(i).getFileName().compareTo(pivot.getFileName()) < 0){
                lesser.add(list.get(i));
            }
        }
        else{
            greater.add(list.get(i));}
    }

    lesser = quickSort(lesser);
    greater = quickSort(greater);

    lesser.add(pivot);
    lesser.addAll(greater);
    sorted = lesser;

    return sorted;
}

看起來你錯過了本節中的else內容:

  ... else if (list.get(i).getExtention().compareTo(pivot.getExtention()) == 0){ if (list.get(i).getFileName().compareTo(pivot.getFileName()) < 0){ lesser.add(list.get(i)); } } ... 

它應該是

  ... else if (list.get(i).getExtention().compareTo(pivot.getExtention()) == 0){ if (list.get(i).getFileName().compareTo(pivot.getFileName()) < 0){ lesser.add(list.get(i)); } else { greater.add(list.get(i)); } } ... 

另請注意,由於您選擇第一個項目作為數據透視表,因此您應該將循環設置為1而不是零(為了不插入兩次樞軸)

暫無
暫無

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

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