Sunteți pe pagina 1din 4

Mtodo de ordenamiento por Burbuja:

Este mtodo consiste en comparar los elementos del arreglo que se encuentran en posiciones adyacentes empezando desde la primera posicin y llegando hasta el final del arreglo. La comparacin depender si estamos ordenando el arreglo en forma ascendente o descendente. Para el caso de ordenamiento ascendente (de menor a mayor) se compara cada elemento con el que le sigue inmediatamente usando el operador mayor que (>). Si el elemento de la posicin de la izquierda es mayor que el elemento de la posicin que le sigue a su derecha, entonces los dos elementos estn mal ubicados y procedemos a intercambiarlos de posicin. El proceso empieza entonces comparando los elementos de la posiciones 1 y 2 del vector, haciendo el intercambio si es preciso. Luego se comparan los elementos de las posiciones 2 y 3 y se procede de igual manera. Seguidamente se comparan los elementos de las posiciones restantes del vector y se realiza el intercambio si es necesario. Se continua as hasta comparar los elementos de las ultimas dos posiciones. Al llegar a este punto resulta que el valor mayor del arreglo quedara ubicado en la ltima posicin del mismo, es decir estar en su posicin correcta. El proceso se repite de nuevo iniciando otra vez desde la posicin 1 del vector, pero teniendo en cuenta que como ya acomodamos en la posicin correcta el mayor elemento, la ultima comparacin que se har ser entre los elementos de las posiciones penltima y antepenltima. Es decir, que reducimos en uno el nmero de comparaciones hechas para acomodar el primer elemento. Implementacin del mtodo que intercambia los elementos de dos posiciones del vector, este mtodo se utilizara para mostrar la implementacin de los otros dos mtodos de ordenamiento: procedure TOrdenamientos.cambiar(p1, p2: integer); var temp:integer; begin temp:=vector[p1]; vector[p1]:=vector[p2]; vector[p2]:=temp; end; Implementacin del mtodo de ordenamiento Burbuja, este mtodo compara elementos de la forma j,j+1. Es decir compara dos posiciones seguidas o continuas del vector:

procedure TOrdenamientos.ordenarBurbuja;
//Para implementar el ordenamiento burbuja utilizamos dos ciclos, por esta razn utilizamos dos //variables para controlar los ciclos que comparan e intercambia elementos.

var
//Variables que controlan los ciclos que recorren el vector para comparar e intercambiar los elementos.

i,j:integer; begin for i:=1 to num do begin for j:=1 to num-i do begin
//Ordeno de menor a mayor, si quiero hacerlo de mayor a menor simplemente cambio el signo, //aqu comparo si el elemento de la izquierda (j) es mayor que el elemento contiguo de la derecha (j+1). //si se cumple la condicin los intercambio.

if getVector(j) > getVector(j+1) then begin


//Para hacer el intercambio en los elementos llamo al mtodo cambiar, declarado anteriormente.

cambiar(j, j+1); end; end; end; end; Rendimiento del algoritmo Al algoritmo de la burbuja, para ordenar un vector de n trminos, tiene que realizar siempre el mismo nmero de comparaciones:

Esto es, el nmero de comparaciones c(n) no depende del orden de los trminos, si no del nmero de trminos.

Por lo tanto la cota ajustada asinttica del nmero de comparaciones pertenece al orden de n cuadrado. El numero de intercambios i(n), que hay que realizar depende del orden de los trminos y podemos diferencia, el caso mejor, si el vector esta previamente ordenado, y el caso peor, si el vector esta ordenado en orden inverso.

Por lo que no se puede determinar una cota ajustada asinttica del nmero de intercambios, dado que este depender del orden del vector en cuestin. Rendimiento en el caso desfavorable Si pasamos al algoritmo un vector ordenado en orden inverso realizara un nmero de comparaciones:

Como ya hemos dicho anteriormente, y tendr que realizar un nmero igual de intercambios entre los trminos del vector, dado que en cada comparacin los trminos estarn desordenados, y se realizar el intercambio.

Por lo tanto en el caso ms desfavorable tanto el nmero de comparaciones como el de intercambios coinciden:

El nmero de comparaciones o de intercambios en el caso ms desfavorable pertenece al orden de n cuadrado. Rendimiento en casos ptimos En el caso ptimo, el ms favorable, es la ordenacin que un vector ya ordenado, en este caso el nmero de comparaciones ser el mismo que en cualquier otro caso:

La cota inferior asinttica del nmero de comparaciones pertenece al orden de n cuadrado, como en los dems casos, pero en todas las comparaciones el orden es el correcto y por tanto no se realiza ningn intercambio:

Por lo tanto el coste de intercambios no depende de n, y es constante:

El ordenamiento de burbuja tiene una complejidad (n) igual que ordenamiento por seleccin. Cuando una lista ya est ordenada, a diferencia del ordenamiento por insercin que pasar por la lista una vez y encontrar que no hay necesidad de intercambiar las posiciones de los elementos, el mtodo de ordenacin por burbuja est forzado a pasar por dichas comparaciones, lo que hace que su complejidad sea cuadrtica en el mejor de los casos. Esto lo cataloga como el algoritmo mas ineficiente que existe, aunque para muchos programadores sea el ms sencillo de implementar. En la prctica. A pesar de que el ordenamiento de burbuja es uno de los algoritmos ms sencillos de implementar, su orden O (n2) lo hace muy ineficiente para usar en listas que tengan ms que un nmero reducido de elementos. Incluso entre los algoritmos de ordenamiento de orden O (n2), otros procedimientos como el ordenamiento por insercin son considerados ms eficientes. Dada su simplicidad, el ordenamiento de burbuja es utilizado para introducir el concepto de algoritmo de ordenamiento para estudiantes de ciencias de la computacin. A pesar de esto, algunos investigadores como Owen Astrachan han criticado su popularidad en la enseanza de ciencias de la computacin, llegando a recomendar su eliminacin de los planes de estudio. Sumado a esto, Jargon File, un libro ampliamente citado en la cultura hacker, lo denomina "el mal algoritmo genrico", y Donald Knuth, uno de los mayores expertos en ciencias de la computacin, afirma que el ordenamiento de burbuja "no parece tener nada para recomendar su uso, a excepcin de un nombre pegajoso y el hecho de que conlleva a problemas tericos interesantes". El ordenamiento de burbuja es asintticamente equivalente en tiempos de ejecucin con el ordenamiento por insercin en el peor de los casos, pero ambos algoritmos difieren principalmente en la cantidad de intercambios que son necesarios. Resultados experimentales como los descubiertos por Astrachan han demostrado que el ordenamiento por insercin funciona considerablemente mejor incluso con listas aleatorias. Por esta razn, muchos libros de algoritmos modernos evitan usar el ordenamiento de burbuja, reemplazndolo por el ordenamiento por insercin. El ordenamiento de burbuja interacta vagamente con el hardware de las CPU modernas. Requiere al menos el doble de escrituras que el ordenamiento por insercin, el doble de prdidas de cache, y asintticamente ms prediccin de saltos. Varios experimentos de ordenamiento de cadenas en Java hechos por Astrachan muestran que el ordenamiento de burbuja es 5 veces ms lento que el ordenamiento por insercin, y 40% ms lento que el ordenamiento por seleccin.

S-ar putea să vă placă și