Hola , como muchos saben existen muchos métodos de ordenar caracteres, números etc, de diferentes formas , condiciones , hay tantas formas de ordenar algo como distribuciones de linux hay en internet . Cada una de estas formas tienen su nombre y rapidez diferente, una muy conocida es Quick Sort (estará bien escrito?) , ahora la que les voy a mostrar hoy me llego a la cabeza cuando leía la lista de métodos de ordenamiento y es una forma simple, “rápida” (eso espero , tengo que probarla ) . Le he llamado Ordenamiento Grille , como cuando descubres un cráter nuevo en la luna , pero como no tengo telescopio y la luna ya está llena de nombres pues le pongo mi apellido a esta forma de ordenar caracteres.
Aunque no está implementado este método nos da la posibilidad de poder ordenar un conjunto de datos grande sin tener que cargarlo completamente en memoria ,esto puede ser útil en archivos grandes.
No me queda más nada por decirles , solo que es libre para usarlo bajo las condiciones de la GPL :-)
Primero necesitamos la longitud de los datos que ordenaremos. Este dato estará en ECX y EDX , usaremos un loop para ordenar empezando por el final Tendremos una Variable “vacía” con una longitud (en este caso de 4 bytes por cada byte ASCII) .
Es decir 256*4 = 1024 bytes , esto nos da la posibilidad de ordenar hasta (si fuera “necesario”) 4.294.967.295 bytes de datos (pequeño numero
)
Esto puede “incluso” aumentarse para ordenar mas … o menos …
.
tabla db 1024 dup (?)
datos db “hola que tal”,0
mov ecx,12 ; << Longitud de los datos en decimal
mov edx,ecx ; << Longitud de los datos
ordenamiento:
mov al,[datos - 1 + ecx]
inc dword ptr ds:[tabla + eax * 4]
loop ordenamiento
mov al, 0
ciclo:
mov ecx , dword ptr ds:[tabla + eax * 4]
cmp ecx,0 ; Cuando sea Cero , saltamos ya que este caracter no existe!
jz salto
; En el caso que usted sepa que existen todos los caracteres puede eliminar esta parte.
; Ma adelante tal vez implemente una forma para detectar esto y hacer todo mas rápido?¿ (hay que probar!)
aun:
mov byte ptr ds:[datos - 1 + edx],al
dec edx
loop aun
salto:
dec al
jnz ciclo