Если вам не нужно делать это на месте, было бы намного проще просто создать новый массив.
char[] letters = {'l', 'o', 'e', 'h', 'l'};
int[] positions = {2, 4, 1, 0, 3};
char[] result = new char[letters.length];
for (int i = 0; i < letters.length; i++)
result[positions[i]] = letters[i];
System.out.println(result);
Вывод
hello
Для решения на месте подойдет следующее. Вывод тот же, что и выше.
char letters[] = {'l', 'o', 'e', 'h', 'l'};
int positions[] = {2, 4, 1, 0, 3};
for (int i = 0, j; i < letters.length; i++) {
while ((j = positions[i]) != i) {
char tempLetter = letters[i];
letters[i] = letters[j];
letters[j] = tempLetter;
int tempPosition = positions[i];
positions[i] = positions[j];
positions[j] = tempPosition;
}
}
System.out.println(letters);
Это можно легко записать, используя только один l oop.
for (int i = 0, j; i < letters.length; ) {
if ((j = positions[i]) == i) {
i++;
} else {
char tempLetter = letters[i];
letters[i] = letters[j];
letters[j] = tempLetter;
int tempPosition = positions[i];
positions[i] = positions[j];
positions[j] = tempPosition;
}
}