Soy un alumno de un curso de estadística y tengo una serie de tareas de papel asignadas en orden aleatorio. Parte de mi trabajo es alfabetizarlos. He estado usando un método similar al de clasificación rápida, pero otros alumnos han usado diferentes métodos. Quiero un método de ordenación eficiente, con justificación, porque cuando tengo un número "grande" de los exámenes, la justificación presentada .. Aquí hay algunos detalles que he apalancadas:El mejor algoritmo para ordenar los exámenes
- tengo una lista que contiene una lista ordenada alfabéticamente de todos los nombres que debería ver
- No me interesa que los nombres estén más alfabetizados que la primera letra. Por ejemplo, estoy bien si "Smith, John" viene antes que "Salk, Jonas".
- Nunca tendré que ordenar más de 300 objetos.
Mi método hasta ahora ha sido encontrar la última letra mediana (es decir, si hay 60 documentos, elija la última letra correspondiente a la persona 30) de la lista de la clase, trátela como un punto de pivote, y coloque todas las letras encima de la mediana en una pila, y todas las letras debajo en otra. Si una letra es la misma que la mediana, la coloco en la pila mediana. Ahora hago lo mismo en las pilas arriba/debajo de la mediana. Cuando las pilas son lo suficientemente pequeñas como para que solo haya tres o cuatro letras en una pila, hago una pila para cada letra, luego doblo las pilas en una pila maestra, alfabéticamente.
¿Hay algún algoritmo específicamente diseñado para la alfabetización, o algo que sea más eficiente en promedio que mi método? Un método que parecía funcionar bien era hacer una pila para cada letra (26 montones, en el peor de los casos), pero esto consume tanto espacio que no es factible para un escritorio.
La razón de la formalización de una situación tan tonta proviene más de una discusión amistosa con otro estudiante graduado que utiliza clasificación de inserción con dos pilas (crea una pila ordenada, agrega cada papel de la pila no ordenada a la pila ordenada, en orden) que de una necesidad seria. Esperaba que la comunidad SO pudiera proporcionar justificación para un método en particular sobre el otro. –