Зависит от контекста.
Однократный поиск в несортированном массиве:
O(n \log n) или O(n^2) (зависит от алгоритма).O(\log n).O(n \log n) или O(n^2).O(n).O(n).O(n)) дешевле, чем сортировка + поиск (O(n \log n) или хуже).Многократный поиск в массиве:
k поисков в одном и том же массиве.O(n \log n) или O(n^2).k поисков (бинарных) после сортировки: k \times O(\log n) = O(k \log n).O(n \log n + k \log n) или O(n^2 + k \log n).k переборов (линейных): k \times O(n) = O(kn).O(kn).k (k > \log n) сортировка с последующим бинарным поиском становится дешевле: O(n \log n + k \log n) vs O(kn).Особые случаи:
O(1) время для поиска, что обычно быстрее любого метода, основанного на сортировке или линейном поиске.Вывод: Для одиночного поиска перебор дешевле. Для многократного поиска в одном и том же массиве, сортировка с последующим бинарным поиском становится выгоднее при достаточно большом количестве поисков. Если важна скорость поиска и структура данных может быть изменена, использование Set или Hash может быть самым оптимальным решением.
Пример линейного поиска в Ruby:
ruby
Пример сортировки и бинарного поиска в Ruby (с использованием стандартных методов):
ruby