• Fabián Flores
• David Marín
• Jefferson Romo
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.
Descripción
Repita mientras
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
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
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
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
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;
Lenguaje C++
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 10
int main(){
int a[TAM], temp, i, j;
clrscr();
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
getch();
}
C (Ejemplo 2)
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
System.out.print( X[i]);
}
System.out.println("");
JavaScript
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#
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
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:
Bibliografía: