Главная
Алгоритмы
Двоичный (бинарный) поиск
Двоичный (бинарный) поиск (также известен как метод деления пополам и дихотомия) — классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины .
Сложность алгоритма log^2(n) (это меньше чем просто n).
Время выполнения алгоритма логарифмическое (это меньше чем линейное).
Примерно посчитать количество шагов можно размер массива значений разделить на два и еще на два и т.д. (if arr.length==100 then 1. 50/2 , 2. 25/2 , 3. 13/2 , 4. 7/2 , 5. 4/2 , 6. 2/2, 7. 1 ... получается примерно 7 шагов).
Код на Java :
Код на C :
Код на JavaScript :
//// Binary search function using JavaScript
/// Defining function
function binSearch(arr, toFind)
{
/// Checking our array for emptiness.
if (!arr) return null;
var first = 0;
var last = arr.length - 1;
/// Running binary search
while (first < last)
{
var mid = first + Math.floor((last - first) / 2);
if (arr[mid] >= toFind) last = mid;
else first = mid + 1;
}
/// After the end of the loop, lastIndex can point to the search item.
/// Otherwise the element is missing in the array.
if (arr[last] == toFind)
return last;
else return null;
}
/// Let's try out our function:
console.log(binSearch([1, 2, 4], 4 )); // Output is: 2
console.log(binSearch([1, 2, 4], 3 )); // Output is: null
console.log(binSearch([1, 2, 4], 2 )); // Output is: 1
console.log(binSearch([ ], 1 )); // Output is: null
console.log(binSearch("abcdef",'c')); // Output is: 2