No pude hacerlo funcionar, estoy tratando de organizar los valores de la matriz en orden ascendente por el uso de un bucle for.

        int[] arr = new int[5] { 5, 6, 2, 4, 1 };

        for (int i = 0; i <= arr.Length; i++)
        {
            if (arr[i] > arr[i + 1])
            {
                int temp = arr[i + 1];
                arr[i] = arr[i + 1];
                arr[i] = temp;
            }

            Console.Write(arr[i]);
        }
  • Alguna razón usted no desea utilizar Array.Sort?
  • Creo que usted necesita para leer sobre las matrices, y cómo el índice de ellos.
  • O OrderBy ?.
  • Soy nuevo en la programación, un par de semanas atrás, yo era capaz de hacer eso, pero después de unos pocos, las cosas parece desorden.
  • Creo que es genial que usted está tratando de aprender – y llamando a la Matriz.Tipo no le ayudará a aprender mucho acerca de la programación/matrices. Pero si te digo la respuesta que usted no va a aprender mucho. Usted necesita leer algunas páginas web/tutoriales acerca de las matrices y de cómo el índice de ellos, y el experimento hasta que usted entienda lo que está pasando.
  • En realidad ni siquiera se llega allí, se producirá una excepción ya cuando i == arr.Length - 1.
  • Posibles duplicados de C# clasificación de matrices en orden ascendente y descendente

InformationsquelleAutor aliadiere | 2014-05-10

11 Comentarios

  1. 5

    Estoy asumiendo que usted está utilizando no Array.Sort porque usted está haciendo esto como un ejercicio de aprendizaje; no hay otra manera de evitar esto es muy común en función de la librería.

    La razón por la que su algoritmo no funciona es que no es lo suficiente como para ir a través de una matriz una vez, y de intercambio de los elementos que están fuera de orden. Tratar de hacer esto como un experimento mental, cuando la matriz es casi ordenados, pero en el primer elemento se encuentra en el final, como este:

    2 3 4 5 6 7 1

    Una única ruta de acceso se acercará más, pero no se podía llevar a todos el camino a una matriz ordenada:

    2 3 4 5 6 1 7

    Como usted puede ver, usted tiene que repetir este proceso varias veces, hasta que el array está ordenado. ¿Cómo saber que el array está ordenado? Usted sabe que cuando todo el bucle interno no tiene una sola swap.

    Aquí es cómo se puede implementar esta:

    bool didSwap;
    do {
        didSwap = false;
        for (int i = 0; i < arr.Length-1; i++)
        {
            if (arr[i] > arr[i + 1])
            {
                int temp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = temp;
                didSwap = true;
            }
        }
    } while (didSwap);
    for (int i = 0; i != arr.Length ; i++) {
        Console.Write(arr[i]);
    }

    Nota de varios cambios en su código:

    • La impresión se realiza en un bucle, después de la clasificación se completa
    • El lazo va a arr.length-1, no arr.length, porque de lo contrario su último cheque se vaya fuera de los límites de la matriz.
    • Este algoritmo de ordenación se llama Bubble Sort. Hay varias optimizaciones para este algoritmo, que puede hacer es ir un poco más rápido.
    • En general, la ordenación de burbuja es uno de los más lenta algoritmos de ordenación. Cuando el número de elementos a ordenar es alta, usted debe considerar un algoritmo avanzado, o el uso de la biblioteca de la aplicación.
  2. 3

    int Matriz[] = { 11, 33, 5, -3, 19, 8, 49 };

            int temp;
    
            for (int i = 0; i < Array.Length - 1; i++)
            {
    
                for (int j = i + 1; j < Array.Length; j++)
                {
                    if (Array[i] > Array[j])
                    {
    
                        temp = Array[i];
                        Array[i] = Array[j];
                        Array[j] = temp;
    
                    }
    
                }
    
            }
    
            Console.Write("Sorted:");
    
            foreach (int sort in Array)
                Console.Write("{0} ", sort);
  3. 1

    Si usted desea hacer su propia clasificación, entonces no es suficiente con sólo recorrer los elementos de una vez y el intercambio. El más cercano que es el ordenación de burbuja algoritmo, donde se recorre la matriz varias veces hasta que no hay más elementos para swap:

    int[] arr = new int[5] { 5, 6, 2, 4, 1 };
    
    bool swapped = true;
    while (swapped) {
      swapped = false;
      for (int i = 0; i < arr.Length - 1; i++) {
        if (arr[i] > arr[i + 1]) {
          swapped = true;
          int temp = arr[i + 1];
          arr[i] = arr[i + 1];
          arr[i] = temp;
       }
      }
    }
    for (int i = 0; i < arr.Length - 1; i++) {
      Console.Write(arr[i]);
    }

    También hay métodos integrados para ordenar los datos, que es más fácil de usar, más eficiente, y ya probado a fondo:

    int[] arr = new int[5] { 5, 6, 2, 4, 1 };
    Array.Sort(arr);
    • hay un error tipográfico donde arr[i] es el doble de lo asignado, uno de ellos debe ser arr[i+1]
  4. 1

    Uso de Linq Ordenar por:

    int[] arr = new int[5] { 5, 6, 2, 4, 1 };
    
    int[] ascOrderedArray = (from i in arr orderby i ascending select i).ToArray();

    Creo que podría ser fácil y por qué usted necesita un bucle for.

    • excelente muy buena idea
  5. 0
    • Podría ser útil para la persona que hace la pregunta para describir el por qué de lo que están haciendo no funciona en vez de sólo la resolución de una pregunta simple para ellos.
  6. 0
    • Mientras este fragmento de código se puede resolver la cuestión, , incluyendo una explicación de realmente ayuda a mejorar la calidad de tu post. Recuerde que usted está respondiendo a la pregunta para los lectores en el futuro, y esas personas pueden no saber las razones de su sugerencia de código.
  7. -1

    Usted debe hacer como :

    int[] arr = new int[5] { 5, 6, 2, 4, 1 };

    //para comprobar Matriz ordenada

    for (int i = 0; i < arr.Longitud; i++)
    {
    la consola.escribir( arr[i].ToString());
    }

    Para el pasado 1 usted no necesita comprobar automáticamente será ordenado.

    • Yo no creo que esta sea la adecuada ordenación de burbuja. El bucle externo se supone que para salir tan pronto como detecta que no hay valores de intercambio. No se supone que la cuenta a la longitud de la matriz.
    • Yo no era la implementación de ordenación de Burbuja aquí. Yo estaba ayudando usuario para solucionar el problema en el código. Si existe la necesidad de la optimización y de la complejidad que van a ser atendidos también. Mi objetivo era solucionar la cuestión planteada en ques. Gracias.
  8. -2

    @Jon Skeet Que quería usar un bucle for.

    Existen numerosos tipos de clases. La más sencilla es la Especie de Burbuja.

    • Yo no creo que esta sea la adecuada ordenación de burbuja. El bucle externo se supone que para salir tan pronto como detecta que no hay valores de intercambio. No se supone que la cuenta a la longitud de la matriz.
    • No importa si lo hace o no. Todavía es un O(n^2) algoritmo. Esto es con fines de aprendizaje. Preoptimisation es la raíz de todos los males.
    • Sí, ese es el peor de los casos la complejidad del algoritmo, pero no hay necesidad de escribir código que realiza inútil iteraciones.
    • APRENDER los conceptos básicos, asegurarse de que funciona, entonces de optimizar!
    • Si desea mostrar los aspectos básicos, a continuación, usted debe utilizar el original de la burbuja algoritmo de ordenación, no un roto optimizado variación de la misma.

Dejar respuesta

Please enter your comment!
Please enter your name here