sort complexity bubble algorithms algorithm sorting

algorithm - complexity - Método de ordenación de Windows Explorer



sorting algorithms complexity (8)

De la forma en que lo entendí, Windows Explorer ordena según tu segundo ejemplo: siempre me irritó enormemente que salga el pedido 1, 10, 2. Es por eso que la mayoría de las aplicaciones que escriben muchos archivos (como aplicaciones por lotes) siempre usan nombres de archivos de longitud fija con 0 o lo que sea.

Su solución debería funcionar, pero tendría que tener cuidado donde están los números en el nombre del archivo, y probablemente solo use su enfoque si estuvieran al final.

Estoy buscando un algoritmo que ordene cadenas similares a la forma en que los archivos (y las carpetas) se ordenan en el Explorador de Windows. Parece que los valores numéricos en cadenas se tienen en cuenta cuando se ordenan, lo que da como resultado algo así como

name 1, name 2, name 10

en lugar de

name 1, name 10, name 2

que obtienes con una comparación regular de cadenas.

Estaba a punto de comenzar a escribir esto, pero quería comprobar si alguien había hecho esto antes y estaba dispuesto a compartir algunos códigos o ideas. La forma en que abordaría esto sería agregar ceros a los valores numéricos en el nombre antes de compararlos. Esto daría como resultado algo así como

name 00001, name 00010, name 00002

que cuando se ordena con una ordenación de cadena regular me daría el resultado correcto.

¿Algunas ideas?



Se llama "orden de clasificación natural". Jeff tuvo una entrada bastante extensa en el blog hace un tiempo, que describe las dificultades que puede pasar por alto y tiene enlaces a varias implementaciones.



Explorer utiliza la API StrCmpLogicalW () para este tipo de clasificación (llamado ''orden de clasificación natural'').

No necesita escribir su propia función de comparación, solo use la que ya existe.

Una buena explicación se puede encontrar aquí .


Este es un intento de implementarlo en Java:

Java - Ordenar cadenas como Windows Explorer

En resumen, divide las dos cadenas para comparar en letras - partes de dígitos y compara estas partes de una manera específica para lograr este tipo de clasificación.