Я делаю проект колледжа по управлению библиотеками, используя двусвязные списки. В двусвязном списке хранятся идентификаторы книг во время сортировки.
Я попытался вычислить прошедшее время для наихудшего случая для линейного и двоичного поиска. Следующие результаты:
Binary search: 0.311ms
Linear search: 0.228ms
[Number of inputs(id's): 10000000]
МОЙ ВОПРОС:
Несмотря на то, что бинарный поиск требует O (logn) сравнений, прошедшее время было больше из-за того, что потребовалось O (n) обходов, пока не было найдено среднее значение. Есть ли лучший алгоритм поиска для отсортированного двусвязного списка, чем громоздкий линейный поиск?
Моя реализация для нахождения среднего значения, необходимого для бинарного поиска:
struct node* middle(node* start, node* last)
{
if (start == NULL)
return NULL;
struct node* slow = start;
struct node* fast = start -> next;
while (fast != last)
{
fast = fast -> next;
if (fast != last)
{
slow = slow -> next;
fast = fast -> next;
}
}
return slow;
}