Ordenamiento de burbuja - Algoritmos de ordenamiento

in #cervantes7 years ago

Algoritmo de ordenamiento

WallpaperCode.jpg

El término algoritmo se refiere a una serie de pasos ordenados y finitos para resolver un problema.

Los algoritmos de ordenamiento son aquellos que tienen como propósito tomar los elementos de una lista y ordenarlos con algún tipo de criterio. Estos elementos de una lista pueden ser objetos, números, cadenas, transacciones y todo lo que se pueda abstraer con lenguajes de programación y poner en una lista.

Los algoritmos más conocidos de ordenamiento son de tipo numérico y lexicográfico. En esta ocasión aprenderemos usando un tipo de ordenamiento numérico: Ordenamiento de burbuja ó bubble sort

Ordenamiento de burbuja - Cómo funciona

giphy.gif

Como se puede ver en la imagen, este algoritmo compara cada par de elementos adyacentes e intercambia los elementos de orden dependiendo el criterio: si es un ordenamiento de menor a mayor, pone el menor primero, si es un criterio de mayor a menor pone primero el mayor. Este intercambio de elementos se hace en toda la lista hasta que no haya ningún elemento que intercambiar. En mi opinión es muy difícil entender esto con palabras o incluso la animación de ejemplo, se requiere programar para poder entenderlo.

Ejemplo Real de un ordenamiento de burbuja

Accedemos al siguiente link para poder codificar, compilar y ejecutar el programa
que realizaremos: https://www.tutorialspoint.com/compile_c_online.php

Si tenemos conocimientos del lenguaje C, el lenguaje para machos alfas, tendremos
más facilidad de entender este ejemplo, sino es un buen acercamiento no tan complejo y que nos permitirá adentrarnos a la programación de mejor manera.

En la pantalla en donde esta el código solo dejaremos esta parte.

#include <stdio.h>

int main()
{


    return 0;
}

Dentro de nuestra función main vamos a declarar un array o en español
arreglo. Este es un tipo de dato que reserva un cierto número de espacios en la memoria del tamaño que le especifiquemos, es decir, si declaramos el array como int, reservara espacios para valores de tipo int, si lo declaramos de tipo double, reservara espacios de ese tipo, los cuales evidentemente son de distinto número de bits. En efecto, codificamos un array de 10 espacios, de tipo int y le pondremos sus valores.

#include <stdio.h>

int main()
{
    int lista[10] = {1,34,3,32,7,17,66,8,2,3};

    return 0;
}

Ya que lo declaramos vamos a ordenarlo con bubble sort baby.

Para poder hacer este recorrido vamos a usar un ciclo. Una instrucción para repetir n veces un proceso.
También vamos a ir imprimiendo en la pantalla lo que pasa dentro de este ordenamiento.

#include <stdio.h>

int main()
{
    int lista[10] = {1,34,3,32,7,17,66,8,2,3};
    int i;
     for (i = 0 ; i < 10; i++){
     printf("Lista[ %i, %i, %i, %i, %i, %i, %i, %i, %i, %i ]\n", lista[0],
     lista[1],lista[2],lista[3],lista[4],lista[5],lista[6],lista[7],
     lista[8],lista[9]);
     }

    return 0;
}

Este for lo que hace es decir: repite todo lo que este dentro de mi alcance, desde 0 hasta 10 , y vas a ir de uno en uno (i++). . (Y no olvidemos declarar nuestra variable i).

Consecuentemente agregamos una instrucción para imprimir la lista completa de elementos e ir viendo como va quedando.
Analicemos esta instrucción y generalicemos la forma en que se imprimen valores en pantalla, no es difícil, solo hay que seguir la sintáxis. ¿porqué esos símbolos? es una pregunta que por ahora no vale la pena hacerse.

Ojo, si queremos ir viendo como funciona presionamos el boton de compilar y si no sale ningún error, le damos en exectue y vemos en la pantalla verde lo que sale.

burbujaadad.PNG

El problema aquí es que un solo ciclo solo nos permitirá recorrer una vez toda la lista de elementos así que tendremos que agregar un ciclo dentro de nuestro ciclo para que podamos tomar un elemento y recorrer toda la lista, luego, tomar otro elemento y recorrer toda la lista, y así sucesivamente...

#include <stdio.h>

int main()
{
    int lista[10] = {1,34,3,32,7,17,66,8,2,3};
    int i;
    int j;
    
     for (i = 0 ; i < 10; i++){
     printf("Lista[ %i, %i, %i, %i, %i, %i, %i, %i, %i, %i ]\n", lista[0],
     lista[1],lista[2],lista[3],lista[4],lista[5],lista[6],lista[7],
     lista[8],lista[9]);
     for(j = 0; j < 9; j++){
         
         
     }
        
     }

    return 0;
}


Ahora, dentro de este nuevo for lo que haremos será comparar los elementos adyacentes en una sentencia de tipo IF, es decir, le diremos en una instrucción a la computadora, "Si el elemento adyacente es menor, ya que elegiremos ordenar de menor a mayor, guardame esa variable en otra temporal para poder hacer el intercambio y que no se pierda ningún valor.

**Veamoslo con el ejemplo.**
int main()
{
    int lista[10] = {1,34,3,32,7,17,66,8,2,3};
    int i;
    int j;
    int swap;
    
     for (i = 0 ; i < 10; i++){
     printf("Lista[ %i, %i, %i, %i, %i, %i, %i, %i, %i, %i ]\n", lista[0],
     lista[1],lista[2],lista[3],lista[4],lista[5],lista[6],lista[7],
     lista[8],lista[9]);
     for(j = 0; j < 9; j++){
         if(lista[j] > lista[j+1]){
             swap = lista[j];
             lista[j] = lista[j+1];
             lista[j+1] = swap;
         }
         
     }
        
     }

    return 0;
}

En nuestra pantalla verde veremos como queda al último ordenada nuestra lista(;.

Si quieren cambien los valores y prueben con otros, me gustaría pudierán postear en los comentarios sus capturas y sus resultados!!

Sort:  

codes python ?

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63191.19
ETH 2615.47
USDT 1.00
SBD 2.73