Ya sé que este suele ser un tema básico pero me he encontrado con un resultado inesperado en el funcionamiento de estos operadores.
Mi problema es que estaba implementando un algoritmo de ordenamiento por inserción tanto en C++ como en Java; sin embargo, el resultado obtenido en C++ no era el que esperaba por eso pongo la duda en este foro.
Aquí el código en Java:
public static void insertionSort(int[] numbers){
for(int i = 1; i < numbers.length; ++i){
int currentValue = numbers[i];
int previousIndex = i-1;
while(previousIndex >= 0 && currentValue < numbers[previousIndex])
numbers[previousIndex+1] = numbers[previousIndex--];
numbers[previousIndex+1] = currentValue;
showArray(numbers);
}
}
Y aquí el código en C++:
void insertionSort(int *numbers, const int size){
for(size_t i = 1; i < size; ++i){
int currentValue = numbers[i];
int previousIndex = i-1;
while(previousIndex >= 0 && currentValue < numbers[previousIndex])
numbers[previousIndex+1] = numbers[previousIndex--];
numbers[previousIndex+1] = currentValue;
showArray(numbers, size);
}
}
Como se puede ver, códigos idénticos. El problema está en la línea 6 del código en C++. He visto que había valores que se repetían y después de un rato investigando he visto que si en C++ se cambia la línea 6 por:
numbers[previousIndex+2] = numbers[previousIndex--];
Entonces sí funciona. Y si se cambia el bucle <while> por:
while(previousIndex >= 0 && currentValue < numbers[previousIndex]){
numbers[previousIndex+1] = numbers[previousIndex];
--previousIndex;
}
También funciona correctamente. Entonces el problema sé que está en el orden en que se realiza el decremento. Me gustaría sabes cómo funciona eso en profundidad ya que veo que no funciona igual en Java que en C++.
PD: Agradecería también una explicación del funcionamiento en Java para ver cuáles son las diferencias exactamente. O si es mejor que abra otro tema en el foro de Java para esta parte me lo podéis decir también.