Algoritmo de ordenación por mezcla directa
PSEUDOCÓDIGO
MÓDULO Ordenacion_mezcla_directa
DATOS
PARÁMETROS
Recibe NOMBRE_F cadena ** fichero a ordenar
Recibe NOMBRE_F1 cadena ** primer fichero auxiliar
Recibe NOMBRE_F2 cadena ** segundo fichero auxiliar
VARIABLES
NUM_ELEM entero ** num. de registros a ordenar
TAM_SEC entero ** tamaño de la secuencia actual
INICIO
TAM_SEC ← 1
Repetir
Separar (NOMBRE_F, NOMBRE_F1, NOMBRE_F2, TAM_SEC, NUM_ELEM)
Mezcla_directa (NOMBRE_F, NOMBRE_F1, NOMBRE_F2,TAM_SEC, NUM_ELEM)
TAM_SEC ← 2 * TAM_SEC
Hasta que (TAM_SEC ≥ NUM_ELEM)
FIN
CÓDIGO C
PRONTO SERÁ INCORPORADO....
El siguiente módulo realiza la partición, copiando de forma alternativa en cada fichero auxiliar una secuencia de TAM_SEC registros consecutivos procedentes del fichero a ordenar. La última secuencia copiada puede tener menos de TAM_SEC registros:
PSEUDOCÓDIGO
MÓDULO Separar
DATOS
PARÁMETROS
Recibe NOMBRE_F cadena ** fichero a ordenar
Recibe NOMBRE_F1 cadena ** primer fichero auxiliar
Recibe NOMBRE_F2 cadena ** segundo fichero auxiliar
Recibe TAM_SEC entero ** tamaño de la secuencia
Transforma ELEM_F entero ** registros del fichero origen
VARIABLES
REG de tipo REGISTRO
F, F1, F2 archivos de REGISTRO
N entera ** número de reg. escritos en un destino
INICIO
F1 ← Abrir NOMBRE_F1 para Escritura
F2 ← Abrir NOMBRE_F2 para Escritura
F ← Abrir NOMBRE_F para Lectura
ELEM_F ← 0
Leer F, REG
ELEM_F ← ELEM _F + 1
Mientras (FF(F) = Falso) hacer
N ← 0
Mientras ( (FF(F) = Falso) Y (N < TAM_SEC) ) hacer
Escribir F1, REG
N ← N + 1
Leer F, REG
ELEM_F ← ELEM _F + 1
fin-mientras
N ← 0
Mientras ( (FF(F) = Falso) Y (N < TAM_SEC) ) hacer
Escribir F2, REG
N ← N + 1
Leer F, REG
ELEM_F ← ELEM_F + 1
fin-mientras
fin-mientras
Cerrar F
Cerrar F1
Cerrar F2
FIN
CÓDIGO C
PRONTO SERÁ INCORPORADO....
El siguiente módulo realiza la mezcla de los dos ficheros auxiliares, copiando los registros sobre el fichero a ordenar. Dicho fichero se construye mezclando secuencias ordenadas de tamaño TAM_SEC de los dos ficheros auxiliares. El parámetro ELEM_F indica el número de registros que contenía el fichero a ordenar antes de partirlo en dos. Por tanto, el fichero resultante de la mezcla debe tener tambiŕn ELEM_F registros. Cuando ya no queden registros por mezclar procedentes de uno de los dos ficheros auxiliares, se copiarán en el destino todos los registros restantes del otro fichero auxiliar (copia de cabos).
PSEUDOCÓDIGO
MÓDULO Mezcla_directa
DATOS
PARÁMETROS
Recibe NOMBRE_F cadena ** fichero a ordenar
Recibe NOMBRE_F1 cadena ** primer fichero auxiliar
Recibe NOMBRE_F2 cadena ** segundo fichero auxiliar
Recibe TAM_SEC entera ** tamaño de la secuencia
Recibe ELEM_F entera ** registros del fichero a ordena
VARIABLES
REG1, REG2 de tipo REGISTRO
RESTA_F1 entero ** reg. de la sec. del fich. 1 por mezclar
RESTA_F2 entero ** reg. de la sec. del fich. 2 por mezclar
RESTA enteros ** reg. totales por mezclar
F, F1, F2 archivos de REGISTRO
INICIO
F1 ← Abrir NOMBRE_F1 para Lectura
F2 ← Abrir NOMBRE_F2 para Lectura
F ← Abrir NOMBRE_F para Escritura
RESTA ← ELEM_F ** registros totales que faltan por mezclar
Repetir
** número de registros a mezclar del primer origen
Si (RESTA ≥ TAM_SEC) entonces
RESTA_F1 ← TAM_SEC
sino
RESTA_F1 ← RESTA
fin-si
RESTA ← RESTA - RESTA_F1
** número de registros a mezclar del segundo origen
Si (RESTA ≥ TAM_SECUENCIA) entonces
RESTA_F2 ← TAM_SEC
sino
RESTA_F2 ← RESTA
fin-si
RESTA ← RESTA - RESTA_F2
Leer F1, REG1
Leer F2, REG2
Mientras ( (RESTA_F1 ≠ 0) Y (RESTA_F2 ≠ 0) ) hacer
Si (REG 1.CLAVE < REG2.CLAVE) entonces
Escribir F, REG1
RESTA_F1 ← RESTA_F1 - 1
Si (RESTA_F1 ≠ 0) entonces
Leer F1, REG1
fin-si
sino
Escribir F, REG2
RESTA_F2 ← RESTA_F2 - 1
Si (RESTA_F2 ≠ 0) entonces
Leer F2, REG2
fin-si
fin-si
fin-mientras
** copia de cabos
Mientras (RESTA_F2 ≠ 0) hacer
Escribir F, REG2
RESTA_F2 ← RESTA_F2 - 1
Si (RESTA_F2 ≠ 0) entonces
Leer F2, REG2
fin-si
fin-mientras
Mientras (RESTA_F1 ≠ 0) hacer
Escribir F, REG1
RESTA_F1 ← RESTA_F1 - 1
Si (RESTA_F1 ≠ 0) entonces
Leer F1, REG1
fin-si
fin-mientras
Hasta que (RESTA = 0)
Cerrar F
Cerrar F1
Cerrar F2
FIN
CÓDIGO C
PRONTO SERÁ INCORPORADO....
Comentarios
Publicar un comentario