Вы определенно можете сделать это в O (n log n). Но лучший подход зависит от того, что важнее: быстрый, чистый код или отсутствие выделения дополнительной памяти.
Если вам не нужно использовать дополнительную память, вы можете выделить отдельный массив, где каждый элемент представляет собой пару:
public class Pair implements Comparable {
...
}
Тогда вы бы отсортировали массив пар, используя Arrays.sort(Object[])
.
Если вы не хотите выделять достаточно много места, вы можете использовать вспомогательный массив, содержащий индексы в форме Integer
:
final String[] array1 = ...;
final String[] array2 = ...;
assert array1.length == array2.length;
Comparator<Integer> c = new Comparator<Integer> {
int compare(Integer a, Integer b) {
return array1[a].compareTo(array1[b]);
}
};
Integer[] aux = new Integer[array1.length];
for (int i = 0; i < aux.length; ++i) { aux[i] = i; }
Arrays.sort(aux, c);
String[] result = new String[array1.length];
for (int i = 0; i < aux.length; ++i) {
result[i] = array2[aux[i]];
}
Если вы пытаетесь сделать все на месте и не выделять дополнительную память, то вам нужно будет самостоятельно реализовать один из алгоритмов сортировки n-log-n ...