[英]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.