java - 我的 QuickSort 实现存在问题

标签 java 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 而不是 0 开始循环(以免插入主元两次)

关于java - 我的 QuickSort 实现存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56643801/

相关文章:

java - log4j 不写入文件

c++ - 关于快排的两个问题

java - 创建 pdf 的保存对话框

Java Path接口(interface)和OCPJP7考试

java - 需要一个高效的Map或Set,在添加和删除时不会产生任何垃圾

c++ - std::partition 段错误问题

c - 快速排序运行时速度问题

java - 进行大量网络调用

algorithm - Lomuto 的分区,稳定与否?

algorithm - 为什么随机快速排序被认为比标准快速排序更好?