сравнение алгоритмов сортировки - PullRequest
1 голос
/ 25 марта 2010

Когда мы предпочитаем

а) сортировка ведра и б) сортировка по основанию

по сравнению типа

  • пузырьковая сортировка
  • сортировка вставок
  • выбор сортировки
  • сортировка слиянием
  • быстрая сортировка?

Ответы [ 3 ]

2 голосов
/ 25 марта 2010

Математики сказали бы, что большинство сортировок выполняется за O (n log (n)) или O (n²), тогда как RadixSort запускается за O (n). - источник

Bucket sort - двоюродный брат радикальной сортировки с самым младшим значащим числом разрядов. - источник

Преимущества: - скопировано с источника

  • Сорта Radix и Bucket стабильны, сохраняя существующий порядок равных ключей.

  • Они работают в линейном времени, в отличие от большинства других видов. Другими словами, они не задерживаются, когда необходимо отсортировать большое количество элементов. Большинство сортировок выполняется за время O (n log n) или O (n ^ 2).

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

  • Radix-сортировка особенно эффективна, когда у вас есть большое количество записей для сортировки с помощью коротких клавиш.

2 голосов
/ 25 марта 2010

Радикальная сортировка предпочтительна, когда вам нужно отсортировать много из чисел, обычно натуральных чисел, которые вписываются в 32/64-битные целые числа (если меньше, рассмотрите возможность сортировки) . Это потому, что он быстрее, делает около k*N операций, где k - это константа (другими словами, O(N) время). k обычно составляет 2 или 4 для 32-битных целых.

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

Если вы не уверены, что быстрее (а иногда трудно убедиться), запустите тесты. Всегда учитывайте случаи, когда входные данные уже отсортированы, отсортированы в обратном порядке и в случайном порядке. Рассмотрите требования к памяти для каждого алгоритма и сделайте свой выбор соответственно.

0 голосов
/ 25 марта 2010

Это звучит очень похоже на домашнее задание, поэтому я не хочу говорить слишком много.

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...