es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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…

Tags:  , , , ,

Answer

  1. Avatar for 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 usando sizeof(d), que devolvería 20 (suponiendo que sizeof(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:

    void sorting(int d[], int length) {
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j < length; j++) {
                if (d[i] > d[j]) {
                    int temp = d[i];
                    d[i] = d[j];
                    d[j] = temp;
                }
            }
        }
    }
    

    Luego, al llamar a la función sorting, es necesario pasar la longitud del array, así:

    int arr[] = {5, 2, 6, 8, 1};
    int length = sizeof(arr) / sizeof(arr[0]);
    sorting(arr, length);
    

    Esto debería solucionar el problema de ordenación en el código C++.

Comments are closed.