Проблема с моей реализацией QuickSort - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь отсортировать файлы по их расширениям (и если они совпадают с расширениями по имени файла), используя мою собственную реализацию 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;
}

1 Ответ

0 голосов
/ 18 июня 2019

Похоже, вам не хватает 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, а не с нуля (чтобы не вставлять элемент поворота дважды)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...