Линейный поиск работает, просматривая каждый элемент в списке данных, пока он не найдет цель или не достигнет конца. Это приводит к производительности O (n) в данном списке.
Бинарный поиск поставляется с условием, что данные должны быть отсортированы. Мы можем использовать эту информацию, чтобы уменьшить количество элементов, на которые мы должны обратить внимание, чтобы найти нашу цель. Мы знаем, что если мы посмотрим на случайный элемент в данных (скажем, на средний элемент), и этот элемент будет больше нашей цели, то все элементы справа от этого элемента также будут больше нашей цели. Это означает, что нам нужно взглянуть только на левую часть данных. По сути, каждый раз, когда мы ищем цель и промахиваемся, мы можем устранить половину оставшихся предметов. Это дает нам хорошую O (log n) временную сложность.
Просто помните, что сортировка данных, даже с самым эффективным алгоритмом, всегда будет медленнее, чем линейный поиск (самые быстрые алгоритмы сортировки - O (n * log n)). Таким образом, вы никогда не должны сортировать данные только для того, чтобы потом выполнить один двоичный поиск. Но если вы будете выполнять много поисков (скажем, по крайней мере O (log n) поисков), возможно, стоит отсортировать данные, чтобы вы могли выполнять двоичные поиски. Вы можете также рассмотреть другие структуры данных, такие как хеш-таблица в таких ситуациях.