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.

¿Por qué el arreglo no está ordenado correctamente?

El problema es ordenar las columnas del array X (n, m) en orden ascendente.

Escribí este código en c++, pero al final no ordena todas las columnas correctamente. Por favor, ayuda si alguien sabe.

#include <iostream>
using namespace std;
int main() {
    int n, m;
    cout << "tamaño del array: n = ";
    cin >> n;
    cout << "tamaño del array: m = ";
    cin >> m;
    int array[n][m];
    int arrayS[n];
    for (int z = 0; z < n; z++) {
        for (int a = 0; a < m; a++) {
            cin >> array[z][a];
        }
    }
    for (int i = 0; i < n; i++) {
        arrayS[i] = array[i][0];
    }
    for (int y = 0; y < n; y++) {
        for (int i = 0; i < m; i++) {
            cout << array[y][i] << "    ";
        }
        cout << endl; //salto de linea
    }
    cout << "************************************\n";
    cout << "columnas de la matriz\n";
    int enk = 0;
    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++) {
            if (arrayS[j] > arrayS[j + 1]) {
                enk = arrayS[j];
                arrayS[j] = arrayS[j + 1];
                arrayS[j + 1] = enk;
            }
        }
    for (int i = 0; i < n; i++) {
        cout << arrayS[i] << "  ";
    }
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código está en el algoritmo de ordenamiento. El código solo está ordenando la primera columna del arreglo, en lugar de todas las columnas. Para ordenar todas las columnas, es necesario modificar el algoritmo de ordenamiento para iterar a través de cada columna en lugar de solamente la primera.

    Una opción es utilizar un bucle anidado para iterar a través de cada columna y ordenarla individualmente. Aquí hay un ejemplo de cómo se puede hacer:

    for (int col = 0; col < m; col++) {
        // copiar la columna a un arreglo individual
        int colArr[n];
        for (int row = 0; row < n; row++) {
            colArr[row] = array[row][col];
        }
        // ordenar el arreglo individual
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++) {
                if (colArr[i] > colArr[j]) {
                    int temp = colArr[i];
                    colArr[i] = colArr[j];
                    colArr[j] = temp;
                }
            }
        }
        // copiar el arreglo ordenado de vuelta a la columna original en el arreglo
        for (int row = 0; row < n; row++) {
            array[row][col] = colArr[row];
        }
    }
    

    Este código itera a través de cada columna y hace lo siguiente para cada una:

    1. Copia los valores en la columna a un arreglo individual (colArr)
    2. Ordena el colArr usando un algoritmo de burbuja simple
    3. Copia los valores ordenados de vuelta a la columna original en el array

    Con este código, todas las columnas en el arreglo deberían estar ordenadas en orden ascendente.

Comments are closed.