Вам необходимо изменить «операцию сравнения», которая определяет порядок вашего результата:
if(inputArray.get(leftIndex) <= inputArray.get(rightIndex)) {
Сортировка элементов в порядке возрастания. Чтобы (каламбур намеревался) получить обратное, измените сравнение значений; наоборот:
if(inputArray.get(leftIndex) > inputArray.get(rightIndex)) {
Если вы хотите сделать свой алгоритм более модульным, вы можете изменить его интерфейс для принятия экземпляра Comparator<T>
, который затем используется для сравнения значений, например,
public void merger(
int startIndex,
int midIndex,
int endIndex,
Comparator<Integer> comparator) {
// ...
if(comparator.compare(inputArray.get(leftIndex), inputArray.get(rightIndex)) < 0) {
// ...
}
и затем позвоните, например:
merger(start, mid, end, Integer::compareTo); // or even:
merger(start, mid, end, Comparator.naturalOrder());
для подъема; или
Comparator<Integer> comparator = Integer::compareTo;
merger(start, mid, end, comparator.reversed());
// or as one-liner:
merger(start, mid, end, Collections.reverseOrder(Integer::compareTo)); // or even:
merger(start, mid, end, Comparator.reverseOrder());
, чтобы получить результат в порядке убывания.