我正在尝试使用自己的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;
}
答案 0 :(得分:0)
在本节中您似乎缺少了一个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开始而不是从0开始循环(以免两次插入枢轴)