Está en la página 1de 8

Solucin Algortmica de Problemas

Grupo:1151
Ordenamiento burbuja

Arreola Gmez Marcos Emmanue


Martha Carolina Ortega Mosqueda
Fernando Garca Beltrn

1
Ordenamiento burbuja
(Bubble Sort)
En informtica el bubble sort es un algoritmo de estructura sencilla, el
cual sirve para realizar una ordenacin en los vectores. Este mtodo consiste
en acomodar el vector moviendo el mayor hasta la ltima casilla comenzando
desde la casilla cero del vector hasta haber acomodado el nmero ms grande
en la ltima posicin, una vez acomodado el ms grande, prosigue a encontrar
y acomodar el siguiente ms grande comparando de nuevo los nmeros desde
el inicio del vector, y as sigue hasta ordenar todo los elementos el arreglo.
Este algoritmo es muy deficiente ya que al ir comparando las casillas para
buscar el siguiente ms grande, ste vuelve a comparar las ya ordenadas. A
pesar de ser el algoritmo de ordenamiento ms deficiente que hay, ste es el
ms usado en todos los lenguajes de programacin.
El procedimiento de la burbuja
Ir comparando desde la casilla 0 numero tras nmero hasta encontrar
uno mayor, si este es realmente el mayor de todo el vector se llevar
hasta la ltima casilla, si no es as, ser reemplazado por uno mayor que
l.
Este procedimiento seguir as hasta que haya ordenado todas las
casillas del vector.
Una de las deficiencias del algoritmo es que ya cuando ha ordenado
parte del vector vuelve a compararlo cuando esto ya no es necesario.
Entonces: Dado un vector a1, a2, a3, ... an
1) Comparar a1 con a2 e intercambiarlos si a1>a2 (o a12)
2) Seguir hasta que todo se haya comparado an-1 con an
3) Repetir el proceso anterior n-1 veces
Algoritmos:

C
{
int temp, i, j;

for (i = 0; i < util_v -1 ; i++) {


for (j = i + 1; j < util_v ; j++) {
if (v[i] > v[j]) {

2
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
}
}}
C++
{

for (size_t i = 0; i < v.size() - 1; ++i){


for (size_t j = i + 1; j < v.size(); ++j){
if (v[i] > v[j])
swap(v[i], v[j]);
}
}
}

C#

{
int t= x.Length, temp;
for(int i=1 ; i< t ; i++)
for(int j = t-1 ; j >= i; j--)
{
if(x[j] < x[j-1])
{
temp= x[j];
x[j]= x[j-1];
x[j-1]= temp;
}

3
}
return x;
}
Java
//Ordenamiento por Burbuja
// by ramses2999
publicstatic int[] OrdenarBurbuja(int[] n){
int temp;
int t = n.length;
for (int i = 1; i < t; i++) {
for (int k = t- 1; k >= i; k--) {
if(n[k] < n[k-1]){
temp = n[k];
n[k] = n[k-1];
n[k-1]= temp;
}//fin if
}// fin 2 for
}//fin 1 for
return n;
}//fin
Perl
sub bubblesort
{ for my $i ( 0 .. @_-2 ) {
for my $j ( $i+1 .. @_-1 ) {
@_[ $i, $j ] = @_[ $j, $i ] if $_[$i] > $_[$j];
}}
}

4
Visual Basic
Private Sub OrdenarBurbuja(ByRef VectorOriginal() As Integer)
Dim Temp, Longitud As Integer
Longitud = UBound(VectorOriginal) - 2
For b = 0 To Longitud
For a = 0 To Longitud
If VectorOriginal(a) > VectorOriginal(a + 1) Then
Temp = VectorOriginal(a + 1)
VectorOriginal(a + 1) = VectorOriginal(a)
VectorOriginal(a) = Temp
EndIf
Next
Next
End Sub
PHP
<?php

//Ordenamiento por burbuja $numeros = array(9, 4, -1, 7, 8, 11, 6, 12, 10,


5);

$n = count($numeros);

for ($i = 1; $i<$n; $i++) {

for ($j = $n-1; $j >= $i; $j--) {


echo "i: $i, j: $j\n";
echo "Comparando " . $numeros[$j-1] . " y " . $numeros[$j] . "\n";
if ($numeros[$j-1] > $numeros[$j]) {
$aux = $numeros[$j];
$numeros[$j] = $numeros[$j-1];

5
$numeros[$j-1] = $aux;
}
}
}

print_r($numeros);

Pascal
begin

for i:=1 to size-1 do


for j:=1 to size-i do
begin
if lista[j]>lista[j+1] then
begin
aux:=lista[j];
lista[j]:=lista[j+1];
lista[j+1]:=aux
end;
end;

Anlisis del Costo Computacional


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 nmero 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.

6
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.
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 ms ineficiente que existe,
aunque para muchos programadores sea el ms sencillo de implementar.
Aplicacin
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

7
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.

http://www.estructuradedatos.galeon.com/burbujatext.htm
http://www.ecured.cu/index.php/Ordenamiento_de_burbuja
http://c.conclase.net/orden/?cap=burbuja
https://www.youtube.com/watch?v=L3d48etbseY

También podría gustarte