Je pense qu'il est un peu plus facile de suivre la logique de l'algorithme si vous déclarez des variables explicites pour garder la trace des indices que vous échangez à chaque itération de la boucle.
public static void reverse(int[] data) {
for (int left = 0, right = data.length - 1; left < right; left++, right--) {
// swap the values at the left and right indices
int temp = data[left];
data[left] = data[right];
data[right] = temp;
}
}
Je pense aussi que c'est plus lisible de faire ça dans une boucle while.
public static void reverse(int[] data) {
int left = 0;
int right = data.length - 1;
while( left < right ) {
// swap the values at the left and right indices
int temp = data[left];
data[left] = data[right];
data[right] = temp;
// move the left and right index pointers in toward the center
left++;
right--;
}
}
34 votes
Je vois ce que j'ai fait de mal. Ça devrait être validData.length/2. Sinon, il s'inverse puis se dés-inverse.
4 votes
Voir fr.wikipedia.org/wiki/algorithme en place qui contient une description de la version correcte de cet algorithme.
0 votes
Java 8 : stackoverflow.com/a/46756353/1216775