Как получить первые 10 отсортированных элементов списка без сортировки всего списка - PullRequest
7 голосов
/ 28 июня 2010

Проблема в том, что у меня есть список из 1 миллиона номеров, но я хочу только 10 первых в отсортированном списке, но я не хочу сортировать весь список? Это возможно?

Ответы [ 2 ]

6 голосов
/ 28 июня 2010

То, что вы хотите, это приоритетная очередь. Вставьте каждый номер в приоритетную очередь. Если размер очереди превышает 10, удалите наименьшее (или наибольшее) значение. Значения, которые остаются в очереди в конце, являются 10 самыми большими (или самыми маленькими). ​​

Если очередь реализована с использованием кучи, то это может быть очень эффективным алгоритмом.

6 голосов
/ 28 июня 2010

Да.Вы просто просматриваете список один раз и сохраняете десять самых маленьких чисел.Алгоритм будет O (n) (фактически, O (n * 10) наихудший регистр)

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...