2010-03-16 1 views
1

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

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

Тот факт, что уже есть встроенные функции в std :: list для выполнения этих видов заказов, заставляет меня поверить, что есть доступ к списку таким же удобным способом, как и я.

В любом случае, за вашу помощь заранее!

+0

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

ответ

6

Способ, которым работает связанный список, заключается в том, что вы просматриваете элементы в списке по одному. По определению нет доступа к «случайному» элементу в списке. Метод сортировки, на который вы ссылаетесь, фактически создает новый список, проходя через каждый узел по одному и помещая предметы в нужное место.

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

Дополнительная информация о связанных списках: http://en.wikipedia.org/wiki/Linked_list

+0

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

3

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