#list #sorting #linked-list #heap
#Список #сортировка #связанный список #куча
Вопрос:
Я пытаюсь создать функцию сортировки на c , которая сортирует объект связанного списка с помощью сортировки по куче, но я не уверен, с чего начать. Кто-нибудь может подсказать мне, как это сделать? Я даже не уверен, как бы я отсортировал связанный список
Ответ №1:
Heapsort работает путем создания кучи из данных. Кучу эффективно создавать только тогда, когда у вас есть произвольный доступ к каждому элементу.
Первым шагом будет создание массива указателей на объекты вашего списка, чтобы вы могли выполнить обычную сортировку массива по куче.
Последним шагом будет преобразование вашего массива указателей обратно в связанный список.
Лучшим методом сортировки для связанного списка является сортировка по вставке — не в последнюю очередь потому, что вы можете выполнять сортировку как часть insert()
функции вашей реализации связанного списка.
Ответ №2:
Я должен согласиться с ответом Сарнольдса. Устанавливать связанный список в куче крайне неэффективно по ряду причин, но первая заключается в том, что они должны были быть отсортированы при первоначальном размещении. Тем не менее, если бы я собирался попробовать, я бы создал ArrayList<T> links
загрузку всех ссылок в него. Затем вы можете собирать это в кучи и сортировать их. Как только вы закончите, просто перезагрузите свой связанный список, начиная с заголовка.
Ответ №3:
Сортировка по куче хороша по двум причинам —
1 — Это действующий алгоритм.
Двухкратная сложность O (nlogn)
O (nlogn) происходит из-за характера произвольного доступа к массиву, но если вы используете связанный список, то вы не получите преимущества произвольного доступа к массиву. Следовательно, временная сложность станет O (n ^ 2). Это не подходит для сортировки.
Я порекомендую вам использовать алгоритм сортировки слиянием для связанного списка.