Anda di halaman 1dari 11

LOS J A C K ER S

Responsables del Contenido:

• Fabián Flores
• David Marín
• Jefferson Romo

"El Desarrollo Es Lo Nuestro, Y Lo Tuyo Contratarnos"

Tema: ALGORITMO DE ORDENAMIENTO BURBUJA


Introducción

Una tabla o un archivo es un grupo de elementos, cada uno de los cuales se llama
registro. Hay una llave asociada a cada registro, que se usa para diferenciar unos de
otros. La asociación entre un registro y su llave puede ser simple o compleja. En la
forma más simple, la llave esta contenida dentro del registro en un tramo a una
distancia especifica del principio del mismo. Una llave de ese tipo es la llave interna o
incluida.

Un algoritmo de búsqueda es un algoritmo que acepta un argumento a y trata de


encontrar un registro cuya llave sea a. El algoritmo puede dar como resultado el
registro entero o, lo que es más común, un apuntador a dicho registro.

Si la búsqueda es infructuosa, con mucha frecuencia, es deseable agregar un


nuevo registro con dicho argumento como llave. Un algoritmo que haga esto se le
llama tabla búsqueda o diccionario.

La búsqueda en la cual toda la tabla esta de manera frecuente en la memoria


principal se le llama búsqueda interna, mientras que la busqueda en la que la mayor
parte de la tabla esta en la memoria auxiliar se llama busqueda externa.

Descripción

Este es el algoritmo más sencillo probablemente. Ideal para empezar. Consiste en


ciclar repetidamente a través de la lista, comparando elementos adyacentes de dos en
dos. Si un elemento es mayor que el que está en la siguiente posición se intercambian.

Una manera simple de expresar el ordenamiento de burbuja en pseudocódigo es la


siguiente:

Algoritmo Ordenamiento de burbuja


Procedimiento
Haga lo siguiente:

Para hasta haga lo siguiente:


Si entonces:

Repita mientras

La instrucción significa que se debe intercambiar el valor de


con el de . El algoritmo también puede ser expresado de manera equivalente
como sigue:

Algoritmo Ordenamiento de burbuja


Procedimiento
Para hasta haga lo siguiente:
Para hasta haga lo siguiente:
Si entonces:

Notar que:
• Se supone que los vectores que se están ordenando empiezan en la posición
cero (0) y terminan en la posición n − 1.
• El ordenamiento se hace de menor a mayor, si se quisiera hacer al revés
bastaría con cambiar el sentido de la comparación en las sentencias si de cada
algoritmo, es decir, donde pone '>' poner '<'.

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
Algoritmo: Complejidad
for(i=0; i < n-1; i++){ T(n2)
for(j=0; j < n-1; j++){ T(n)
if(vec[j] > vec[j+1]){ T(1)
aux=vec[j]; T(1)
vec[j]=vec[j+1]; T(1)
vec[j+1]=aux;} T(1)
}
}
El procedimiento de la burbuja es el siguiente:
 Ir comparando desde la casilla 0 numero tras número 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 halla ordenado todas las casillas del
vector.
 Una de las deficiencias del algoritmo es que ya cuando a ordenado parte del
vector vuelve a compararlo cuando esto ya no es necesario.
Ejemplo:

Vector
Variables
pos 0 1 2 3 4 5 6 7
i j a[j] a[j+1] inicio 44 55 12 42 94 18 6 67
0 1 55 12 cambio 44 12 55 42 94 18 6 67
0 2 55 42 cambio 44 12 42 55 94 18 6 67
0 4 94 18 cambio 44 12 42 55 18 94 6 67
0 5 94 6 cambio 44 12 42 55 18 6 94 67
0 6 94 67 cambio 44 12 42 55 18 6 67 94
1 0 44 12 cambio 12 44 42 55 18 6 67 94
1 1 44 42 cambio 12 42 44 55 18 6 67 94
1 3 55 18 cambio 2 42 44 18 55 6 67 94
1 4 55 6 cambio 12 42 44 18 6 55 67 94
2 2 44 18 cambio 12 42 18 44 6 55 67 94
2 3 44 6 cambio 12 42 18 6 44 55 67 94
3 1 42 18 cambio 12 18 42 6 44 55 67 94
3 2 42 6 cambio 12 18 6 42 44 55 67 94
4 1 18 6 cambio 12 6 18 42 44 55 67 94
5 0 12 6 ordenado 6 12 18 42 44 55 67 94
RIMERA MEJORA DEL METODO DE LA BURBUJA
La primera "pasada" a lo largo del vector deja el número mayor en el extremo
derecho. La segunda pasada deja los dos números mayores ordenados en el extremo
derecho, y así hasta quedar el vector ordenado ascendentemente..
A comparación con el método de la burbuja que compara parte del vector cuando ya
esta ordenado, este no lo hace ya que ahora tiene el límite para no llegar a comparar a
donde ya ordeno.
Algoritmo (Orientado a C) Complejidad
for (i=0; i < n-1; j++){ T(n2)
for (j=0; j < (n-1)-i; j++){ T(n)
if (a(j) > a(j+1) ){ T(1)
aux = a(j); T(1)
a(j) = a(j+1); T(1)
a(j+1) = aux; T(1)
}
}
}
Ejemplo:
Este ejemplo muestra las condiciones en las que se encontraron las variables
cuando se hicieron los respectivos cambios
Vector
Variables
pos 0 1 2 3 4 5 6 7
i j a[j] a[j+1] inicio 44 55 12 42 94 18 6 67
0 0 44 55
1 55 12 cambio 44 55 12 42 94 18 6 67
2 55 42 cambio 44 12 55 42 94 18 6 67
3 55 94
4 94 18 cambio 44 12 42 55 94 18 6 67
5 94 6 cambio 44 12 42 55 18 94 6 67
6 94 67 cambio 44 12 42 55 18 6 94 67
7
1 0 44 12 cambio 44 12 42 55 18 6 67 94
1 44 42 cambio 12 44 42 55 18 6 67 94
2 44 55
3 55 18 cambio 2 42 44 55 18 6 67 94
4 55 6 cambio 12 42 44 18 55 6 67 94
5 55 67
6
2 0 12 42
1 42 44
2 44 18 cambio 12 42 44 18 6 55 67 94
3 44 6 cambio 12 42 18 44 6 55 67 94
4 44 6
5
3 0 12 42
1 42 18 cambio 12 42 18 6 44 55 67 94
2 42 6 cambio 12 18 42 6 44 55 67 94
3 42 44
4
4 0 12 18
1 18 6 cambio 12 18 6 42 44 55 67 94
2 18 42
3
5 0 12 6 Ordenado 12 6 18 42 44 55 67 94
1 12 18
2
6 0 6 12
1 ordenado 6 12 18 42 44 55 67 94

Análisis

Rendimiento en casos óptimos


El ordenamiento de burbuja tiene una complejidad Ω(n²). Cuando una lista ya está
ordenada, a diferencia del ordenamiento por inserción que pasará por la lista una vez,
y encontrará que no hay necesidad de intercambiar las posiciones de los elementos, el
método de ordenación por burbuja esta forzado a pasar por dichas comparaciones, lo
que hace que su complejidad sea cuadrática en el mejor de los casos, esto lo cataloga
como el algoritmo mas ineficiente que existe aunque para muchos programadores sea
el más sencillo de implementar.

Implementaciones en distintos lenguajes de programación.

A Continuación se verán implementaciones del algoritmo de ordenamiento de burbuja


en distintos lenguajes de programación

Visual Basic for Applications

Sub ORDENAR()
Dim X As Integer
Dim I As Integer
Dim y As Double
Dim j As Integer

X=1
For I = 1 To 10
Cells(I, 1) = Rnd
Next I

For I = 1 To 9
For j = I + 1 To 10
If Cells(I, 1) < Cells(j, 1) Then
y = Cells(j, 1)
Cells(j, 1) = Cells(I, 1)
Cells(I, 1) = y
End If

Next j
Next I
End Sub

Visual Basic .NET

Module Burbuja

" Con Este algoritmo podras ordenar un conjunto de números que esten dentro de un
vector de menor a mayor e imprimirlos al final "
( Es una aplicacion de consola como veran )

Sub Main()
Dim i, v(10), j, aux As Integer

'''Se dimencionan las variables i y j para los ciclos repetitivos ( for)


y el vector v con que va a contener 10 posiciones V(10) y la variable aux que nos
servira como auxiliar para el intercambio de valores '.''

For i = 1 To 10
Console.WriteLine(" Digite Un numero para la casilla " & i & " del vector :")
v(i) = Console.ReadLine

Next

For i = 1 To 10

For j = i To 10 - 1

If v(j) > v(j + 1) Then

aux = v(j)
v(j) = v(j + 1)
v(j + 1) = aux

End If
Next

Next

For i = 1 To 10
Console.WriteLine(v(i))

Next
Console.ReadLine()
End Sub

End Module
esta es otra forma utilizando getlength:
For ancla = 0 To vector.GetLength(0) - 2 Step 1
For burbu = ancla + 1 To vector.GetLength(0) - 1 Step 1
If vector(ancla) > vector(burbu) Then
aux = vector(burbu)
vector(burbu) = vector(ancla)
vector(ancla) = aux
End If
Next
Next
Call mostrar(vector)
End If
End Sub
Public Sub mostrar(ByVal W() As Integer)
For tama = 1 To W.GetLength(0) - 1
ordenados.Items.Add(W(tama).ToString)
Next
End Sub
Este ordenamiento es ascendente. Para hacerlo descendente, en vez del vector(ancla)
">" vector(burbu) es "<".

C
void bubble(int *start, int *end) { //Ordena un conjunto de números enteros de menor
a mayor
short fin;

do{
fin = 0;

for(int *i = start; i != *end; i++){


if(*i > *(i+1)){
intercambia(i, i + 1);
fin = 1;
}
}
}while(fin);
}

Lenguaje C++

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define TAM 10

int main(){
int a[TAM], temp, i, j;

clrscr();

randomize(); //Inicializa el generador de números aleatorios

printf ("Llenando arreglo con números aleatorios\n");

for (i=0; i< TAM; i++)


a[i]=random(100);

//Implementacion de Ordenamiento por burbuja de mayor a menor


for (j=1; j <= TAM; j++)

for (i=0; i< TAM-1; i++)

if (a[i] > a[i+1]){

temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}

printf ("\nArreglo ordenado\n");

for (i=0; i< TAM; i++)


printf ("a[%d] = %d\n", i, a[i]);

getch();
}

C (Ejemplo 2)

void bubble(int A[], int tamano_arreglo) //Ordena un arreglo de números enteros de


menor a mayor
{
int temp,temp2, j, i;
for(i = (tamano_arreglo-1); i >= 0; i--)
{
temp2= (tamano_arreglo-1);
for(j = 1; j <= temp2; j++)
{
if(A[j-1] > A[j])
{
/* Intercambio de numeros*/
temp = A[j-1];
A[j-1] = A[j];
A[j] = temp;
}
}
}
}

Python

def bubblesort(l):
"""Ordena la lista l y la devuelve."""
for pasosIzq in range(len(l)-1, 0, -1):
for indice in range(pasosIzq):
if l[indice] < l[indice + 1]:
l[indice], l[indice + 1] = l[indice + 1], l[indice]
return l

Java

//Método de la burbuja en los elementos de un vector.


import java.util.Random;
public class barbarscummBarLechuck!
{
public static void main ( String args [])
{
Random nA = new Random();

int X[] = new int [10];


int i, j, aux;

System.out.println("----------***** NÚMEROS GENERADOS *****----------");

for (i = 0; i < X.length; i++)


{
X[i] = nA.nextInt(9)+1;

System.out.print( X[i]);
}

System.out.println("");

System.out.println("----------***** NÚMEROS ORDENADOS *****----------");

for (i = 0; i < X.length; i++)


{
for (j = 0; j < X.length-1; j++)
{
if (X[j] > X[j+1])
{
aux = X[j];
X[j] = X[j+1];
X[j+1] = aux;
}
}
}
for (i = 0; i < X.length; i++){
System.out.print(X[i]);
}
}
}

JavaScript

for (var i=1; i<Vector.length;i++)


{
for(var j=0;j<Vector.length-1;j++)
{
if (Vector[j] > Vector[j+1])
{
var temp = Vector[j];
Vector[j]= Vector[j+1];
Vector[j+1]= temp;
}
}
}
Perl

sub bubblesort {
# Ordena la lista pasada como argumento por valor
foreach my $i ( 0 .. @_-2 ) {
foreach my $j ( $i+1 .. @_-1 ) {
@_[ $i, $j ] = @_[ $j, $i ] if $_[$i] > $_[$j] }}
}

COBOL

PERFORM ORDENAR-TABLA
VARYING I FROM 1 BY 1
UNTIL I > (TAM - 1)
...

ORDENAR-TABLA.
PERFORM VARYING J FROM 1 BY 1 UNTIL J > (TAM - 1)
IF REGISTRO-NAME(J + 1) < REGISTRO-NAME(J)
MOVE REGISTRO(J) TO AUXILIAR
MOVE REGISTRO(J + 1) TO REGISTRO(J)
MOVE AUXILIAR TO REGISTRO(J + 1)
END-IF
END-PERFORM.

C#

int[] a = new int[]{1,4,6,8,9,0};


System.Console.WriteLine("Programa en C#");
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < a.Length-1; j++)
{
if (a[j] > a[j+1])
{
int aux = a[j];
a[j] = a[j+1];
a[j+1] = aux;
}
}
}
System.Console.WriteLine("Ahora los Imprimo");
for (int i = 0; i < a.Length; i++)
{ System.Console.WriteLine("Valor {0}: {1}", i + 1, a[i]); }

PHP

function bubble_sort($array){
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j=$j-1){
if ($array[$j] < $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}

Pascal

Procedure BubleSort(var sort:Array_integer);

Var
{n es la cantidad de posiciones del arreglo}
a,s,tmp:integer;
Begin

For a := 1 to n do
For s := a-1 to n-1 do
If (sort[s] > sort[s+1]) then
Begin
tmp:= sort[s];
sort[s] := sort[s+1];
sort[s+1] := tmp;
End;
End;
End;

Conclusiones:

El número de comparaciones en el método de la burbuja es fácilmente contabilizable.


Respecto al número de movimientos, éstos dependen de si el arreglo está ordenado,
desordenado o en orden inverso.

Bibliografía:

• H.M. Deitel, P.J. Deitel: "Cómo programar en C/C++". Editorial Prentice


Hall.
• Charles Bowman: "Algoritmos y estructuras de datos: Aproximación en
C". Oxford University Press, 1999.
• "Dictionary of Algorithms, Data Structures, and Problems"

Anda mungkin juga menyukai