Существуют более быстрые решения, усредняющие O (log n) или в некоторых случаях O (log log n) вместо O (n).Если у вас есть Google для "бинарный поиск" и "интерполяционный поиск" , вы, вероятно, найдете очень хорошие объяснения.
Если массив не отсортирован, тогда даэлемент находится где угодно, и вы не можете попасть в O (n), но это не относится к отсортированным массивам.
-
Некоторые пояснения по запросу интерполяции:
В то время как бинарный поиск касается только сравнения двух элементов в терминах «больше / не больше», при интерполяционном поиске также используются числовые значения .Дело в том, что у вас есть отсортированный диапазон значений от 0 до, скажем, 20000. Вы ищете 300 - бинарный поиск начнется с половины диапазона, с 10000. Интерполяционный поиск предполагает, что 300, вероятно, будет где-то ближе к 0чем 20000, поэтому он сначала проверит элемент 6000 вместо 10000. Затем снова - если он слишком высокий, вернитесь в нижний поддиапазон, а он слишком низкий - в верхний поддиапазон.
Для большого массива с +- равномерное распределение значений, интерполяционный поиск должен вести себя намного быстрее, чем двоичный поиск - закодируйте его и убедитесь сами. Кроме того, лучше всего работает, если сначала вы используете один шаг поиска интерполяции, затем один шаг двоичного поиска и т. Д.
Обратите внимание, что это то, что человек делает интуитивно, когда ищет что-то всловарь.