Сортировка массива с элементами в диапазоне от 0 до 9999 - PullRequest
5 голосов
/ 26 апреля 2011

Я недавно наткнулся на проблему C ++.Здесь идет.

Предположим, вы знаете, что все значения в целочисленном массиве попадают в диапазон от 0 до 9999. Покажите, что можно написать O (N) алгоритм для сортировки массивов с этим ограничением.

Насколько я понимаю, алгоритм O (N) - это алгоритм, в котором вы выполняете определенный набор операций O (1) N раз.Сейчас я не могу понять, как вы будете писать программу, которая сортирует массив чисел по O (N).Сортировка в ее самой основной форме состоит в сравнении чисел друг с другом, и нет алгоритма для того, чтобы сделать это за одну итерацию и получить отсортированный массив.

В этом вопросе подчеркивается, что элемент этогомассив может иметь значение только в диапазоне 0-9999.Из вопроса я могу понять, что это ограничение делает все это возможным, и я должен использовать его в своем Алгоритме, чтобы найти решение.Но я все еще никуда.Все известные мне алгоритмы сортировки (Selection, Insertion, Merge, Quick ...) имеют время выполнения больше, чем O (N), с минимальным значением O (log N).

Я могу понять, что некоторые из этих алгоритмов могут иметь время выполнения O (N), но только в своих лучших случаях.Но я не думаю, что вопрос задается в этом отношении.

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

Ответы [ 5 ]

5 голосов
/ 26 апреля 2011

Подсчет сортировки (см. http://en.wikipedia.org/wiki/Counting_sort).. Только виды сравнения - Омега (n lg n).

5 голосов
/ 26 апреля 2011

Radix sort .O (4n) означает O (n).

2 голосов
/ 26 апреля 2011
  1. Инициализация массива counts из 10000 целых чисел в 0.
  2. Итерация по массиву данных a и увеличение counts[a[i]] в каждой итерации.
  3. Итерация по counts и добавьте counts[i] раз значение i к выходному массиву.
0 голосов
/ 26 апреля 2011
  1. Выделить битовый массив равным размеру 10000
  2. Считать ввод
  3. Установить бит-индекс равным значению числа, которое вы читаете.
  4. Считать еще разбитаррай.Если бит установлен, то этот индекс, если ваш номер в отсортированном порядке.
0 голосов
/ 26 апреля 2011

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

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