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