Algoritmo de Ordenación por Intercambio Directo (Burbuja)
Cada pasada sobre el vector lleva un nuevo elemento a su posición definitiva, y en orden, en el extremo de la zona de comparación considerada (extremo derecho en el caso de recorrido de izquierda a derecha y en el extremo izquierdo en el caso de recorrido de derecha a izquierda), por lo que en la siguiente pasada se excluye de las comparaciones.
El algoritmo consiste en aplicar los siguientes pasos, considerando inicialmente todas las posiciones del vector:
- Se comparan los valores de las posiciones contiguas, intercambiándolos si están mal colocados.
- Una vez realizadas todas las posibles comparaciones, se descarta la posición del extremo izquierdo (si se realiza un recorrido de derecha a izquierda) o del extremo derecho (si se realiza un recorrido de izquierda a derecha) del intervalo de posiciones consideradas en la iteración actual, repitiéndose el proceso hasta completar un total de N-1 iteraciones.
PSEUDOCÓDIGO
Ordenación por intercambio directo (izquierda-derecha)
MÓDULO ordenacion_intercambio_directo_izq_der
DATOS
PARÁMETROS
Transforma V() de tipo T
Recibe N entera
VARIABLES
I, J enteras
AUX de tipo T
INICIO
Para J desde 1 hasta N-1
Para I desde 1 hasta N-J
Si ( V(I) > V(I+1) ) entonces
AUX <- V(I)
V(I) <- V(I+1)
V(I+1) <- AUX
fin-si
fin-para
fin-para
FIN
Ordenación por intercambio directo (derecha-izquierda)
MÓDULO ordenacion_intercambio_directo_der_izq
DATOS
PARÁMETROS
Transforma V() de tipo T
Recibe N entera
VARIABLES
I, J enteras
AUX de tipo T
INICIO
Para J desde 1 hasta N-1
Para I desde N hasta J+1 con incremento -1
Si ( V(I-1) > V(I) ) entonces
AUX <- V(I-1)
V(I-1) <- V(I)
V(I) <- AUX
fin-si
fin-para
fin-para
FIN
Ordenación por intercambio directo con test
MÓDULO ordenacion_intercambio_directo_test
DATOS
PARÁMETROS
Transforma V() de tipo T
Recibe N entera
VARIABLES
I, J enteras
SEGUIR lógica
AUX de tipo T
INICIO
J <- 1
SEGUIR <- VERDADERO
Mientras ( (SEGUIR = VERDADERO) y (J < N) ) hacer
SEGUIR <- FALSO
Para I desde 1 hasta N-J
Si ( V(I) > V(I+1) ) entonces
AUX <- V(I)
V(I) <- V(I+1)
V(I+1) <- AUX
SEGUIR <- VERDADERO
fin-si
fin-para
J <- J+1
fin-mientras
FIN
CÓDIGO C
/*Ordena un vector (de menor a mayor) por el método de la burbuja (izquierda-derecha)*/
burbuja(int *v, int n)
{
int i, j, aux;
for(j=0;j<(n-1);j++)
{
for(i=0;i<n-(j+1);i++)
{
if(v[i]>v[i+1])
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
}
}
}
Comentarios
Publicar un comentario