Каковы критерии выбора алгоритма сортировки?

Я читал метод сортировки, который включает сортировку пузырьков, сортировку выбора, сортировку слияния, сортировку кучи, сортировку ведра и т. д.. Они также содержат временную сложность, которая помогает нам узнать, какая сортировка эффективна. Итак, у меня был основной вопрос. Если мы содержим данные, чем как мы будем выбирать сортировку. Сложность времени является одним из параметров, которые помогают нам решить метод сортировки. Но есть ли у нас другой параметр для выбора метода сортировки?.

просто пытаюсь выяснить сортировка по лучше понимание.

имея некоторый запрос о сортировке кучи:

  1. где мы используем сортировку кучи?

  2. Что является большим преимуществом сортировки кучи(кроме временной сложности O (N log n))?

  3. в чем недостаток сортировки кучи?

  4. Что такое время сборки для кучи? (Я слышал O (n), но я не уверен.)

  5. любой сценарий, где мы должны использовать сортировку кучи или сортировку кучи, лучше опция (кроме очереди приоритетов)?

  6. прежде чем применять сортировку кучи к данным, какой параметр мы рассмотрим в данных?

2 ответов


двумя основными теоретическими особенностями алгоритмов сортировки являются сложность времени и сложность пространства.

В общем, сложность позволяет узнать, как изменяется производительность алгоритма по мере увеличения размера набора данных. Вещи для рассмотрения:

  • сколько данных вы ожидаете их сортировать? это поможет вам узнать, нужно ли искать алгоритм с очень низким временем сложность.
  • как будут отсортированы ваши данные уже? будет ли он частично отсортирован? Случайно отсортированный? Это может повлиять на временную сложность алгоритма сортировки. Большинство алгоритмов будут иметь худшие и лучшие случаи - вы хотите убедиться, что вы не используете алгоритм на худшем случае набора данных.
  • сложность не совпадает время. помните, что сложность времени описывает только то, как производительность алгоритма изменяется в зависимости от размера увеличивается набор данных. Алгоритм, который всегда делает один проход по всему входу, будет O (n) - его производительность линейно коррелирует с размером входа. Но алгоритм, который всегда делает два прохода над набором данных, также O (n) - корреляция по-прежнему линейна, даже если константа (и фактическое время работы) отличается.

аналогично, сложность пространства описывает, сколько пространства должен запустить алгоритм. Например, простая сортировка, такая как сортировка вставками требуется дополнительное фиксированное пространство для хранения значения вставляемого элемента. Это вспомогательная пространственная сложность O (1) - она не изменяется с размером входного сигнала. Однако,сортировка слиянием создает дополнительные массивы в памяти во время работы, со вспомогательной пространственной сложностью O(n). Это означает, что объем дополнительного пространства, который требуется, линейно коррелирует с размером ввода.

конечно, алгоритм дизайн часто является компромиссом между временем и пространством - алгоритмы с низкой сложностью пространства могут потребовать больше времени, а альгоитмы с низкой сложностью времени могут потребовать больше пространства.

для получения дополнительной информации вы можете найти в этом уроке полезное.


чтобы ответить на ваш обновленный вопрос, вы можете найти на странице Википедия о Куча Вроде полезное.


Если вы имеете в виду критерии того, какой тип сортировки выбрать, вот некоторые другие элементы для рассмотрения.

количество данных, которые у вас есть: у вас есть десять, сто, тысяча или миллионы элементов для сортировки.

сложность алгоритма: чем сложнее, тем больше испытаний предстоит сделать, чтобы убедиться, что это правильно. Для небольших количеств сортировка пузырьков или быстрая сортировка легко кодируется и тестируется, стих другие виды, которые могут быть излишними для объема данных ты должен разобраться.

сколько времени потребуется для сортировки: если у вас большой набор, пузырь/быстрая сортировка займет много времени, но если у вас много времени, это может не быть проблемой. Однако использование более сложного алгоритма сократит время сортировки, но ценой больших усилий в кодировании и тестировании, что может стоить того, если сортировка идет от длинных (часов/дней) до более короткого промежутка времени.

сами данные: близки ли данные к одинаковым для всё. Для некоторых видов вы можете получить линейный список, поэтому, если вы знаете что-то о составе данных, это может помочь в определении того, какой алгоритм выбрать для усилий.

количество доступных ресурсов: у вас есть много памяти, в которой вы храните все элементы, или вам нужно хранить элементы на диске. Если все не может поместиться в памяти, лучше всего объединить сортировку, где другие могут быть лучше, если вы работаете со всем в памяти.