Да, вы можете, но если операция «сравнивать значения» намного дороже, чем «указатель перемещения», это не имеет никакого смысла.Поскольку обычно «перемещение» обходится примерно так же дорого, как и «сравнение», при обычном поиске:
- O (N) перемещений
- O (N) сравнений
с двоичным кодом:
- O (N) перемещается, чтобы определить размер списка
- O (N) перемещается, чтобы найти элемент
- O (log (N)) сравнения.
В вашем примере значение равно "int", что означает, что сравнение даже дешевле, чем перемещение, поэтому двоичный алгоритм будет намного дороже.
Есливы знаете размер списка, двоичный код может (возможно) стать дешевле, но дополнительная сложность двухстороннего логического перемещения и подсчета элементов убьет любую выгоду из уменьшенного числа сравнений значений.
Конечно, если вам нужно искать несколько раз, самый простой подход - преобразовать связанный список в массив или создать индекс - массив указателей.И в случае, если значение является чем-то более сложным, чем int
, и его гораздо сложнее сравнивать, конечно, более быстрые алгоритмы будут наиболее желательны.