Cómo convertir el algoritmo de ordenamiento Merge Sort de Java a C++
Problema
Tengo un código fuente en Java para ordenar elementos de matriz utilizando el algoritmo merge sort
. El principio utiliza un bucle para comparar un elemento en la matriz con el elemento en el siguiente índice de la matriz. Si el elemento anterior es mayor que el posterior, entonces los números se intercambian lógicamente para reasignar
los elementos de la matriz en los índices.
Mi problema es que el algoritmo de Java funciona pero el algoritmo de C++ no. La lógica es la misma, ¿qué estoy haciendo mal….
Código
Código Java Funcionando
static void sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
Código de C++ construido en la misma pseudocódigo de ordenación por mezcla que el código fuente de Java pero no funciona
void sorting(int d[]) {
for (int i = 0; i < sizeof(d); i++) {
for (int j = i + 1; j < sizeof(d); j++) {
if (d[i] > d[j]) {
int temp = d[i];
d[i] = d[j];
d[j] = temp;
}
}
}
}
Formato de entrada
Ambos métodos recibieron parámetros de matrices inicializadas con un tamaño fijo y luego se utilizó un bucle para recibir la entrada del usuario y asignarla a la matriz, el usuario tiene que ingresar primero el tamaño de la matriz.
Fiabilidad del algoritmo de ordenación por mezcla en otros idiomas
He aplicado el pseudocódigo de ordenación por mezcla en JavaScript, Python y C# y todos funcionaron. No sé por qué C++ sería una excepción, por favor ayúdeme…
davy.ai
Solución
El problema con el código C ++ es que se utiliza el operador
sizeof
para obtener el tamaño del array, pero esto solo devolverá el tamaño de todo el array en bytes, no el número de elementos en el array. Por lo tanto, el bucle itera demasiadas veces, lo que provoca errores en la lógica de ordenación.Para obtener el número de elementos en el array, es necesario dividir el tamaño del array en bytes por el tamaño de cada elemento. Por ejemplo, si tienes un array de enteros
d
con 5 elementos, puedes obtener el tamaño del array en bytes usandosizeof(d)
, que devolvería 20 (suponiendo quesizeof(int)
es 4 bytes). Para obtener el número de elementos, dividirías 20 por 4, lo que da 5.Por lo tanto, para solucionar el código C++, es necesario reemplazar el operador
sizeof
con la longitud real del array de la siguiente manera:Luego, al llamar a la función
sorting
, es necesario pasar la longitud del array, así:Esto debería solucionar el problema de ordenación en el código C++.