Обновление: На самом деле единственным приемлемым решением этой проблемы будет сортировка массива по возрастанию, а затем его изменение.Java: обратная сортировка без сохранения порядка
Пусть S быть следующая последовательность событий:
Event | Time
A | 0:00
B | 0:01
C | 0:01
D | 0:02
У меня есть простой компаратор для сортировки S, который сортирует элементы согласно значения по времени.
public int compare(Event e1, Event e2) {
// Reverse sorting.
// _sortOrder is set outside this method.
if(SORT_DESCENDING.equals(_sortOrder))
return e2.getTime() - e1.getTime(); /* time is long */
return e1.getTime() - e2.getTime();
}
Проблема: когда порядок сортировки по возрастанию, S сортируется правильно: А, В, С, D.
Но когда я использую обратную сортировку, S становится D, в, с, А:
Event | Time
D | 0:02
B | 0:01 /* B and C should be reversed */
C | 0:01
A | 0:00
Это происходит потому, что по умолчанию алгоритм сортировки сохраняет исходный порядок для элементов с одинаковым значением времени.
Итак, как мне отсортировать его, не сохраняя первоначальный заказ?
Примечание: Я знаю, что могу сортировать S восходящие и далее просто вернуть его, но, к сожалению, это не вариант в моем случае.
Примечание вычитания двух Интс не обязательно работать для сравнения. http://stackoverflow.com/questions/608704/why-is-my-simple-comparator-broken Кроме того, вам понадобится бросок для длин, поэтому ваш код не должен компилироваться. –
На самом деле код, который я здесь приводил, является просто упрощением. В проекте класс компаратора немного сложнее. –