Está en la página 1de 3

Ordenamiento de burbuja bidireccional

Este artculo o seccin necesita referencias que aparezcan en una publicacin acreditada,
como revistas especializadas, monografas, prensa diaria o pginas de Internet fidedignas.
Este aviso fue puesto el 26 de noviembre de 2013.
Puedes aadirlas o avisar al autor principal del artculo en su pgina de discusin
pegando: {{subst:Aviso referencias|Ordenamiento de burbuja
bidireccional}} ~~~~
El ordenamiento de burbuja bidireccional (cocktail sort en ingls) es un algoritmo de
ordenamiento que surge como una mejora del algoritmo ordenamiento de burbuja.
La manera de trabajar de este algoritmo es ir ordenando al mismo tiempo por los dos extremos del
vector. De manera que tras la primera iteracin, tanto el menor como el mayor elemento estarn en
sus posiciones finales. De esta manera se reduce el nmero de comparaciones aunque la
complejidad del algoritmo sigue siendo O(n).
Hacemos un recorrido ascendente (del primer elemento al ltimo), cogemos el primer elemento y lo
comparamos con el siguiente, si el siguiente es menor lo pasamos al puesto anterior, de esta forma
al final de la lista nos queda el mayor. Una vez terminada la serie ascendente, hacemos un recorrido
descendente (del ltimo elemento al primero) pero esta vez nos quedamos con los menores a los que
vamos adelantando posiciones en vez de retrasarlas como hicimos en la serie ascendente. Repetimos
las series alternativamente pero reduciendo el mbito en sus extremos pues ya tendremos all los
valores ms bajos y ms altos de la lista, hasta que no queden elementos en la serie; en el
pseudocdigo de ejemplo: Hasta (izq > der).
A continuacin se muestra el pseudo-cdigo del algoritmo:

Procedimiento Ordenacion_Sacudida (v:vector, tam:entero)


Variables
i, j, izq, der, ltimo: tipoposicion;
aux: tipoelemento;
Inicio
//Lmites superior e inferior de elementos ordenados
izq <- 2
der <- tam
ltimo <- tam
Repetir
//Burbuja hacia la izquierda}
//Los valores menores van a la izquierda
//der va disminuyendo en 1 hasta llegar a izq

Para i <- der hasta izq hacer


Si v(i-1) > v(i) entonces
aux <- v(i)
v(i) <- v(i-1)
v(i-1) <- aux
ltimo <- i
Fin_si
Fin_para
izq <- ltimo+1
//Burbuja hacia la derecha
//Los valores mayores van a la derecha
Para j <- izq hasta der hacer
Si v(j-1) > v(j) entonces
aux <- v(j)
v(j) <- v(j-1)
v(j-1) <- aux
ltimo <- j
Fin_si
Fin_para
der <- ltimo-1
Hasta (izq > der)
Fin

También podría gustarte