C# ConsoleBubbleShort: Ordenamiento de una lista de enteros

El método de ordenamiento mediante el algoritmo de burbuja es un clásico de la universidad, a pesar de que es sencillo sirve para desentumecer un poco el cerebro y por un momento nos abstraemos del más puro C# ya que la técnica es independiente del lenguaje de programación.

Consiste para ordenar de menor valor a mayor los elementos de una array en lo siguiente. Comparamos cada elemento de la lista con el siguiente, si el primero es mayor los intercambiamos, de esta forma cuando hemos recorrido toda la lista de elementos el mayor de todo quedará posicionado al final, en la siguiente interacción por tanto no es necesario comparar este elemento.

Si lo expresamos en lenguaje natural:

  • Desde la longitud del array  – 1 hasta 0 vamos decrementando un contador “i”
    • Desde 0 hasta “j  – 1” vamos incrementando en cada vuelta “j
      • Comparamos el elemento del array en posición “j” con el siguiente “j+1” y los intercambiamos si el primero es mayor.

Si tenemos por ejemplo la siguiente lista de 4 elementos:

bubble

bubble1


 using System;
 
 namespace ConsoleBubbleShort
 {
     class Program
     {
         public static void Main(string[] args)
         {            
             int[] intArray = { 3 , 2 , 1 , 8 };
             
             BubbleSort(intArray);
             
             Console.Write("Press any key to continue . . . ");
             Console.ReadKey(true);
         }
         
         public static void BubbleSort(int[] intArray)
         {
             int contador_vueltas=0;
             
             Console.WriteLine("**** Array desordenado ****");
             for (int i=0;i<intArray.Length;i++)
             {
                 Console.Write(intArray[i]+" ");
             }
             Console.WriteLine("");
             
             for(int i=intArray.Length-1;i>0;i--)
             {                
                 for(int j=0; j<= i -1; j++)
                 {
                     contador_vueltas++;
                     if (intArray[j]>intArray[j+1])
                     {
                         int highVal = intArray[j];
                         
                         intArray[j]=intArray[j+1];                        
                         intArray[j+1]=highVal;                            
                     }
                     
                 }
             }
             
             Console.WriteLine("**** Array ordenado ****");
             for (int i=0;i<intArray.Length;i++)
             {
                 Console.Write(intArray[i]+" ");
             }
             
             Console.WriteLine("");
             Console.WriteLine("contador_vueltas: "+contador_vueltas);
         }
     }
 } 

 

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s