Подход Comparator
не сработает. Сортировка использует только локальные сравнения, но ваша проблема - глобальная оптимизация.
Для иллюстрации приведу фактические сравнения с Arrays.sort(array, comparator)
. Обратите внимание, что некоторые из свопов нарушают правильный выбор, сделанный ранее, потому что они имеют только локальные знания.
start: dog,elephant,giraffe,rhinoceros,tiger
dog, elephant (swap)
-> elephant,dog,giraffe,rhinoceros,tiger
dog, giraffe (OK)
-> elephant,dog,giraffe,rhinoceros,tiger
giraffe, rhinoceros (swap)
-> elephant,dog,rhinoceros,giraffe,tiger
dog, rhinoceros (swap)
-> elephant,rhinoceros,dog,giraffe,tiger
elephant, rhinoceros (swap)
-> rhinoceros,elephant,dog,giraffe,tiger
giraffe, tiger (swap)
-> rhinoceros,elephant,dog,tiger,giraffe
dog, tiger (swap)
-> rhinoceros,elephant,tiger,dog,giraffe
elephant, tiger (OK)
-> rhinoceros, elephant, tiger, dog, giraffe