none
Ordenar Matriz de Mayor a Menor C#

    Pregunta

  • Buenas noches.

    Quisiera saber si me podrían ayudar tengo que ordenar los datos de una matriz numérica de mayor a menor.

    Es decir si tengo esto.

    100  1

    99    4

    Me los tendría que ordenar así.

    100  99

    4      1

    Existe algún método para hacerlo.

    El numero de filas y columnas y los datos de la matriz los pido al usuario.


    sábado, 26 de mayo de 2012 0:33

Todas las respuestas

  • podrias suar estas tencicas para ordenar

    Sorting Arrays [C#]

    ademas es una matriz o es un array de valores

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 26 de mayo de 2012 1:21
  • podrias suar estas tencicas para ordenar

    Sorting Arrays [C#]

    ademas es una matriz o es un array de valores

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Es una matriz he hecho esto que me funciona pero nose si es la mejor opción de hacerlo, ya que quiero crear un método que lo haga para cuando tenga que ordenar las matrices solo tenga que invocar al método.

                int mayor;
                for (int f = 0; f < 2; f++)
                {
                    for (int c = 0; c < 2; c++)
                    {
                        for (int x = 0; x < 2; x++)
                        {
                            for (int y = 0; y < 2; y++)
                            {
                                if (arreglo[f, c] > m[x, y])
                                {
                                    mayor = m[f, c];
                                    m[f, c] = m[x, y];
                                    m[x, y] = mayor;
                                }
                            }
                        }
                    }
                }


    sábado, 26 de mayo de 2012 2:59
  • Había pensado en eso pero pienso que me saldrá mas código que el que puse arriba, y el que puse me funciona pero nose si es la mejor manera de hacerlo.
    sábado, 26 de mayo de 2012 3:20
  • saludos

    si tienes una matriz

    5 8 7

    4 9 6

    1 2 3 

    te lo convertira a 

    1 2 3

    4 5 6

    7 8 9

    Si tienen dudas por favor pregunten. SAludos

    public static int[,] Ordenar(int[,] A)

            {

                int temp;

                for (int i = 0; i <= A.GetLength(0)+8; i++)

                {

                    for (int x = 0; x < A.GetLength(0); x++)

                    {

                        for (int y = 0; y < A.GetLength(1); y++)

                        {

                            if (y == A.GetLength(1) - 1)

                            {

                                if (A.GetLength(1) - 1 == x)

                                { break; }

                                if (A[x, y] > A[x + 1, 0])

                                {

                                    temp = A[x, y];

                                    A[x, y] = A[x + 1, 0];

                                    A[x + 1, 0] = temp;

                                }

                                continue;

                            }

                            else if (A[x, y] > A[x, y + 1])

                            {

                                temp = A[x, y];

                                A[x, y] = A[x, y + 1];

                                A[x, y + 1] = temp;

                            }

                        }

                    }

                }

                return A;

            }

    martes, 02 de abril de 2013 3:37
  • Acabo de optimizar mi propio algoritmo jejeje, el for mas externo va hasta A.GetLength(0)+8 y eso no es correcto ya que si la matriz es muy grande podria no ordenarlo todo, asi que use ahora un flag boolean para saber si la matriz ya esta ordenado, en cada recorrido de la matriz.

    Atte,

    public static int[,] Ordenar(int[,] A)

            {

                int temp;

                bool seguir;

                do

                {

                    seguir = false;

                    for (int x = 0; x < A.GetLength(0); x++)

                    {

                        for (int y = 0; y < A.GetLength(1); y++)

                        {

                            if (y == A.GetLength(1) - 1)

                            {

                                if (A.GetLength(1) - 1 == x)

                                { break; }

                                if (A[x, y] > A[x + 1, 0])

                                {

                                    temp = A[x, y];

                                    A[x, y] = A[x + 1, 0];

                                    A[x + 1, 0] = temp;

                                    seguir = true;

                                }

                                continue;

                            }

                            else if (A[x, y] > A[x, y + 1])

                            {

                                temp = A[x, y];

                                A[x, y] = A[x, y + 1];

                                A[x, y + 1] = temp;

                                seguir = true;

                            }

                        }

                    }

                } while (seguir);

                return A;

            }

    martes, 02 de abril de 2013 3:44
  • Es una matriz he hecho esto que me funciona pero nose si es la mejor opción de hacerlo, ya que quiero crear un método que lo haga para cuando tenga que ordenar las matrices solo tenga que invocar al método.

                int mayor;
                for (int f = 0; f < 2; f++)
                {
                    for (int c = 0; c < 2; c++)
                    {
                        for (int x = 0; x < 2; x++)
                        {
                            for (int y = 0; y < 2; y++)
                            {
                                if (arreglo[f, c] > m[x, y])
                                {
                                    mayor = m[f, c];
                                    m[f, c] = m[x, y];
                                    m[x, y] = mayor;
                                }
                            }
                        }
                    }
                }


    Verdaderamente no es la mejor forma de hacerlo. El código que has puesto utiliza el famoso método de ordenación de la burbuja, que es un método de ordenación muy poco optimizado. El problema es que su orden es O (n2). Es decir, aumenta con el cuadrado del número de elementos. Hay otros generalmente mejores, como el quicksort.

    Como te decía Leandro Tuttini, lo mejor es que utilices los mecanismos que .NET ya tiene construidos, como el método Sort de la clase Array. Incluso se pueden ordenar eficientemente mediante tablas hash, ya hasta con una consulta de linq.



    Por cierto, ahora que reviso tu mensaje, no acabo de comprender de qué forma quieres que se ordenen los elementos. ¿Pretendes que se vayan ordenando de mayor a menor, con los elementos mayores en las primeras filas, y cada fila ordenada?
    martes, 02 de abril de 2013 8:37