El problema es que tengo una lista de 1 millón de números, pero solo quiero los 10 primeros de la lista ordenada, pero no quiero clasificar toda la lista? ¿Es eso posible?Cómo obtener los primeros 10 elementos ordenados de una lista sin ordenar toda la lista
7
A
Respuesta
6
Sí. Simplemente revisa la lista una vez y almacena los diez números más pequeños. El algoritmo será O (n) (en realidad, O (n * 10) en el peor caso)
Foreach (list)
- Check if current item is smaller than the biggest item in the sorted Array[10]
- If so, put the current item at the right spot (sorted) in the array (insertionsort), bumping away the biggest item.
6
Lo que queremos es una cola de prioridad. Inserta cada número en una cola de prioridad. Si el tamaño de la cola excede de 10, elimine el valor más pequeño (o el más grande). Los valores que permanecen en la cola al final son los 10 más grandes (o los más pequeños).
Si la cola se implementa utilizando un Heap, este puede ser un algoritmo muy eficaz.
Cuestiones relacionadas
- 1. Python: obtener los primeros 10 resultados de una lista
- 2. ¿Cómo iterar sobre los primeros n elementos de una lista?
- 3. ¿Cómo obtener los primeros X elementos?
- 4. Obtener los n elementos menores de una lista en Python
- 5. C# - Lista - eliminar todos los elementos pero NO los primeros
- 6. C# cómo ordenar una lista sin implementar IComparable manualmente?
- 7. ¿Anida los elementos de la lista dentro de los elementos de lista de una lista ordenada?
- 8. ¿Cómo obtener los primeros N elementos de una lista en C#?
- 9. En bash, ¿cómo puedo imprimir los primeros n elementos de una lista?
- 10. ¿Cómo ordenar una lista numéricamente?
- 11. Cómo obtener elementos ordenados desde una cuadrícula de datos
- 12. Encontrar el enésimo elemento de la lista sin ordenar sin ordenar la lista
- 13. ¿Cómo selecciono 10 elementos aleatorios de una lista en PHP?
- 14. XPath - obtener 10 primeros elementos de conjunto seleccionado
- 15. Ordenar una lista de tuplas sin mayúsculas y minúsculas
- 16. ¿Cómo ordenar una lista según otra lista?
- 17. ¿cómo puedo ordenar una lista y obtener los mejores elementos K? (STL)
- 18. ¿Cómo puedo ordenar parcialmente una lista de Python?
- 19. Obtener elementos distintos de una lista
- 20. Python - Cómo extraer los últimos x elementos de una lista
- 21. ordenar una lista en maravilloso de una manera inusual
- 22. Ordenar en una lista
- 23. Ordenar una lista de tuplas en función de dos elementos
- 24. LINQ: ¿Cómo obtener elementos de una lista interna en una lista?
- 25. Cuenta todos los elementos en la lista de lista anidada arbitraria sin recursión
- 26. F #: cómo imprimir la lista completa (Console.WriteLine() imprime solo los tres primeros elementos)
- 27. todos los elementos en una lista
- 28. ¿Cómo implementar SkipWhile con Linq en Sql sin cargar primero toda la lista en la memoria?
- 29. Si cortar no crea una copia de una lista ni lista() ¿cómo puedo obtener una copia real de mi lista?
- 30. ¿Cómo eliminar los primeros 10 caracteres de una cadena?
Puede convertir ese 10 en una constante basada en lg usando un montón para su "lista" de 10. :-) – corsiKa
O (n * 10) = O (n). – recursive
recursivo: por supuesto, pero esto deja en claro que cuando el número 10 sea más alto (digamos, usted quiere que la mitad de la lista esté ordenada), la O cambiará, y una matriz simple no funcionará. Entonces necesitarás una mejor estructura de datos como dijo el glowcoder. – Konerak