Объединить сортировку с ArrayList - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь реализовать алгоритм сортировки слиянием для ArrayList в качестве параметра. Насколько я могу судить, код работает нормально, за исключением моего оператора if в методе слияния. Я получаю сообщения об ошибочных типах операндов для бинарного оператора '<='. Я уверен, что это потому, что у меня сравниваются два несовместимых типа, но я, кажется, ударил стену, выясняя это. Тем не менее, учащимся, поэтому любое руководство или руководство в правильном направлении было бы чрезвычайно полезно. </p>

Я получил его теперь правильно сортировать по фамилии. Теперь мне интересно, что мне нужно изменить, чтобы отсортировать по имени или даже идентификационному номеру. Если бы я мог получить некоторые рекомендации о том, как справиться с этим, я был бы признателен.

private static void sortListByID (List<Person> theList) {
   if (theList.size() >= 2) {
      List<Person> left  = new ArrayList<>();
      left.addAll(theList.subList(0, theList.size()/2));
      List<Person> right = new ArrayList<>();
      right.addAll(theList.subList(theList.size()/2, theList.size()));

      sortListByID(left);
      sortListByID(right);
      merge(theList, left, right);
   }
}
private static void merge(List<Person> result, List<Person> left, 
      List<Person> right) {
   int i1 = 0;
   int i2 = 0;

   for (int i = 0; i < result.size(); i++) {
      if (i2 >= right.size() || (i1 < left.size() && 
            left.get(i1).compareTo(right.get(i2)) < 0)) {
         result.set(i, left.get(i1));
         i1++;
      } else {
        result.set(i, right.get(i2));
        i2++;
      }
   }
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

в дополнение к предыдущему ответу, вам не нужно использовать рекурсивный метод для сортировки списка. это будет функция слияния, которая объединяет два списка и сортирует их в соответствии с вашей функцией

Вы должны реализовать свой собственный способ выяснить, какой человек приходит раньше, чем другой человек

private static void merge(List<Person> result, List<Person> left,
                          List<Person> right) {
    result.addAll(left);
    result.addAll(right);
    result.sort((o1, o2) -> yourSortFunktionHere...);
}
0 голосов
/ 06 мая 2018

Вы, вероятно, должны использовать compareTo вместо <=, который нельзя использовать с Person объектами

left.get(i1) <= right.get(i2)

становится

left.get(i1).compareTo(right.get(i2)) < 0

Убедитесь, что Person реализует интерфейс Comparable, чтобы этот метод работал

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