Алгоритм поиска отсортированного двойного связанного списка - PullRequest
1 голос
/ 16 марта 2010

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 16 марта 2010

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

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

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

3 голосов
/ 16 марта 2010

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

...