Сам порядок не так важен, но если вы хотите k -й наибольший элемент, то если вы сортируете в порядке убывания, он расположен в k -й элемент (или k-1 , если мы начнем с индекса 0), тогда как если мы сортируем в порядке возрастания, он расположен в индексе n-k + 1 (или nk , если индекс начинается с 0).
Для ленивых алгоритмов сортировки (как в Haskell и C # Linq .OrderBy
), это может иметь последствия в отношении сложности времени. Если мы реализуем ленивый алгоритм сортировки выбора (например, генератор), то он будет работать в O (k & times; n) вместо O (n 2 *) 1026 *) . Если мы используем, например, вариант lazy QuickSort, потребуется O (n + k log n) для получения первых k элементов.
На языке, подобном Haskell, где лень действительно является ключевой особенностью, обычно стремятся не только минимизировать временную сложность алгоритма, создающего весь результат, но и создавать его подмножества.