Академический Документы
Профессиональный Документы
Культура Документы
ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA
6.2.1 RADIX.
A este método también se le llama “ordenamiento de raíz”. Este ordenamiento se basa en los valores de los
dígitos reales en las representaciones de posiciones de los números que se ordenan. Por ejemplo, el número
235 en notación decimal se escribe con un 2 en la posición de centenas, un 3 en la posición de decenas y un
5 en la posición de unidades.
1. Tome cada número en el orden en el cual aparecen en el archivo y colóquelos en una de las diez
colas (0...9) dependiendo del valor del dígito que es procesado.
2. Empezando con la cola de los números con dígito 0 y terminando con la cola de números con dígito
9. Retorne los números al archivo original en el orden en el cual fueron colocados en la cola,
(empezar con el dígito menos significativo y concluir con el más significativo).
El más grande de dos enteros de igual longitud se determina del modo siguiente:
1. Empezar en el dígito más significativo y avanzar por los dígitos menos significativos mientras coinciden
los dígitos correspondientes en los dos números.
2. El número con el dígito más grande en la primera posición en la cual los dígitos de los dos números no
coinciden es el mayor de los dos (por supuesto sí coinciden todos los dígitos de ambos números, son
iguales).
1. Debido a que el ciclo for (k = 1; k <= m; k++) externo se recorre m veces (una para cada dígito) y el
ciclo interior n veces (una para cada elemento en el archivo) el ordenamiento es de aproximadamente
(m*n). Es decir, los requerimientos del tiempo para el método depende del número de dígitos (m) y el
número de elementos del archivo (n). El ordenamiento es de O(m*n).
2. Si las llaves son complejas (es decir, si casi cada número que puede ser una llave lo es en realidad) m se
aproxima a log n, por lo que (m*n) se aproxima a (n log n).
3. Si la cantidad de dígitos es grande, en ocasiones es más eficiente ordenar el archivo aplicando primero
el ordenamiento de raíz a los dígitos más significativos y después utilizando inserción simple sobre el
archivo ya reorganizado. En casos donde la mayoría de los registros del archivo tengan diferente
número de dígitos significativos, este proceso elimina pasos innecesarios en los dígitos menos
significativos.
Ventajas:
Desventajas:
1. Se requiere conocer la cantidad de dígitos del valor máximo (para saber cuando el método ya acomodó
2
ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA
Suponiendo que se quiere ordenar n números, cada uno de ellos compuesto de k dígitos. El siguiente es un
ejemplo con n = 10 y k = 5 (número de dígitos por número).
73895
93754
82149
99046
04853
94171
54963
70471
80564
66496
Imaginando que estos dígitos forman parte de una matriz, podemos decir que a [i, j] es el j-ésimo del i-
ésimo elemento del conjunto. Es fácil, en una pasada, ordenar el conjunto de la llave de ordenación es un
solo dígito, por ejemplo el tercero de izquierda a derecha:
99046
82149
94171
70471
66496
80564
93754
73895
04853
54963
Para ordenar un conjunto de llaves completas, repetimos el proceso dígito por dígito, en cada pasada
separando los elementos según el valor del dígito respectivo, luego recolectándolos para formar una sola
cola, y realimentando el proceso con esos mismos datos. El conjunto completo queda finalmente ordenado
si los dígitos se van tomando de derecha a izquierda.
Como hay que realizar k pasadas y cada una de ellas toma tiempo O(N), el tiempo total es O(k N), que es
el tamaño del archivo de entrada (en bytes). Por lo tanto, la ordenación tomó un tiempo lineal en el tamaño
de los datos.
// Se define un arreglo de N registros o estructuras que contengan un campo de información y uno como
puntero para almacenar la dirección del nodo siguiente.
// FRENTE y POSTERIOR son arreglos auxiliares
3
ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA
RADIX( X[ ], N)
{
Para I desde 0 y mientras I < N–1 Hacer{
NODO[ I ]. INFO = X[ I ] y NODO[ I ]. SIG = I + 1;
}
Hacer NODO[ N–1 ]. INFO = X[ N–1 ], NODO[ N–1 ]. SIG = -1 y PRIMERO = 0;
Para K desde 1 y Mientras K sea menor o igual que el total de dígitos Hacer {
Para I desde 0 hasta 9 Hacer {
FRENTE[ I ] = -1 y POSTERIOR[ I ] = -1;
}
EXP = Elevar 10 a la K–1;
Repetir Mientras (PRIMERO != -1) {
Hacer P = PRIMERO, PRIMERO = NODO[ PRIMERO ]. SIG,
Y = NODO[ P ]. INFO,
J = Residuo de dividir ((Y entre EXP) entre 10) y Q = POSTERIOR[ J ];
Si (Q = -1) entonces Hacer FRENTE[ J ] = P;
De lo contrario Hacer NODO[ Q ]. SIG = P;
Hacer POSTERIOR[ J ] = P;
}
Para J desde 0 y Mientras J < 10 y FRENTE[ J ] = -1 Hacer Incrementar J;
Hacer PRIMERO = FRENTE[ J ];
Repetir Mientras (J <= 9){
Para I desde J+1 y Mientras I < 10 y FRENTE[ I ] = -1 Hacer
Incrementar I;
Si (I <= 9) entonces {
Hacer P=I y NODO[ POSTERIOR[ J ] ]. SIG = FRENTE[ I ];
}
Hacer J = I;
}
Si (POSTERIOR[P] != -1) Hacer NODO[ POSTERIOR[ P ] ]. SIG = -1;
}
Para I desde 0 hasta N–1 Hacer {
X[ I ]= NODO[ PRIMERO ]. INFO y
PRIMERO = NODO[ PRIMERO ]. SIG;
}
}