Cuando un conjunto de elementos se desea ordenarlos, nada mejor que un "sort" o algoritmo de ordenamiento, pero cuando se desee ordenar por más de un campo o llave, el algoritmo se complica porque habría que crear un algoritmo adicional para cada llave subsiguiente cuando la comparación del campo anterior es una igualdad.
Es decir habría que modificar el algoritmo principal para darle cabida a cada llave siguiente y eso complica la vida.
Cuando tuve la oportunidad de dictar clases de Programación Básica apliqué una idea que la tenía desde hace 30 años.
Esta idea consiste en que la ordenación de un campo en forma ascendente es la ordenación del complemento del campo en forma descendente. Parece un juego de palabras, pero veámoslo con un ejemplo: supongamos que tenemos ordenado un grupo de números del 1 al 9 (ascendente) y digamos que el complemento (arbitrariamente elegido sea) 10 menos el número, es decir los nuevos números son 10-1 -> 9, luego 10-2 -> 8, y así sucesivamente lo que estaríamos con los siguientes números 9 al 1, y son justo en orden descendente.
Normalmente una ordenación de registros se compone por crear un nuevo registro en memoria compuesto por los datos del registro colocados al inicio y luego el registro completo, de manera que cuando se tenga ordenado todo, se cortan las llaves y se toma el resto del registro que en conjunto ya está en el orden deseado.
Por lo tanto si se desea ordenar un grupo de registros por distintos campos y en diverso orden (mezcla de ascendente/descendente), lo más fácil es crear el campo de comparación con el conjunto de campos con los complementos de las llaves deseadas (todo lo que sea descendente).
Lo que lograríamos aquí es que nuestro algoritmo de ordenamiento sea siempre en un sentido (ascendente) y si por ejemplo lo que deseamos es descendente, pues le aplicamos el complemento a la llave a ordenar de cada uno de los registros (que se antepondrían a todo el registro, una manera figurada de decirlo*) y al final tendríamos los registros ordenados en forma descendente.
Normalmente lo que se ordena es por caracteres, por lo tanto el complemento binario que se debería usar es el binario de 255 para cada byte de la llave a ordenar en forma descendente, y para los de forma ascendente se les deja tal cual vienen del registro.
*Para formar el registro de datos a ordenar, se debería formar con las llaves de los campos que se deseea ordenar según la prioridad requerida y luego, el número de registro de los datos originales o bien todo el registro original.
Para terminar el sort, se toma la parte del número de registro original o la parte del registro original y se van grabando en una nueva tabla física los registros ordenados.
No hay comentarios:
Publicar un comentario