In
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
, binary search, also known as half-interval search,
logarithmic search, or binary chop, is a
search algorithm
In computer science, a search algorithm is an algorithm designed to solve a search problem. Search algorithms work to retrieve information stored within particular data structure, or calculated in the Feasible region, search space of a problem do ...
that finds the position of a target value within a
sorted array
A sorted array is an array data structure in which each element is sorted in numerical, alphabetical, or some other order, and placed at equally spaced addresses in computer memory. It is typically used in computer science to implement static l ...
. Binary search compares the target value to the middle element of the array. If they are not equal, the half in which the target cannot lie is eliminated and the search continues on the remaining half, again taking the middle element to compare to the target value, and repeating this until the target value is found. If the search ends with the remaining half being empty, the target is not in the array.
Binary search runs in
logarithmic time in the
worst case, making
comparisons, where
is the number of elements in the array.
Binary search is faster than
linear search except for small arrays. However, the array must be sorted first to be able to apply binary search. There are specialized
data structures designed for fast searching, such as
hash tables
In computing, a hash table, also known as hash map, is a data structure that implements an associative array or dictionary. It is an abstract data type that maps keys to values. A hash table uses a hash function to compute an ''index'', ...
, that can be searched more efficiently than binary search. However, binary search can be used to solve a wider range of problems, such as finding the next-smallest or next-largest element in the array relative to the target even if it is absent from the array.
There are numerous variations of binary search. In particular,
fractional cascading speeds up binary searches for the same value in multiple arrays. Fractional cascading efficiently solves a number of search problems in
computational geometry and in numerous other fields.
Exponential search extends binary search to unbounded lists. The
binary search tree
In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and ...
and
B-tree data structures are based on binary search.
Algorithm
Binary search works on sorted arrays. Binary search begins by comparing an element in the middle of the array with the target value. If the target value matches the element, its position in the array is returned. If the target value is less than the element, the search continues in the lower half of the array. If the target value is greater than the element, the search continues in the upper half of the array. By doing this, the algorithm eliminates the half in which the target value cannot lie in each iteration.
Procedure
Given an array
of
elements with values or
records sorted such that
, and target value
, the following
subroutine
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions ma ...
uses binary search to find the index of
in
.
# Set
to
and
to
.
# If
, the search terminates as unsuccessful.
# Set
(the position of the middle element) to the
floor of
, which is the greatest integer less than or equal to
.
# If
, set
to
and go to step 2.
# If
, set
to
and go to step 2.
# Now
, the search is done; return
.
This iterative procedure keeps track of the search boundaries with the two variables
and
. The procedure may be expressed in
pseudocode as follows, where the variable names and types remain the same as above,
floor
is the
floor function, and
unsuccessful
refers to a specific value that conveys the failure of the search.

function binary_search(A, n, T) is
L := 0
R := n − 1
while L ≤ R do
m := floor((L + R) / 2)
if A
< T then
L := m + 1
else if A
> T then
R := m − 1
else:
return m
return unsuccessful
Alternatively, the algorithm may take the
ceiling of
. This may change the result if the target value appears more than once in the array.
Alternative procedure
In the above procedure, the algorithm checks whether the middle element (
) is equal to the target (
) in every iteration. Some implementations leave out this check during each iteration. The algorithm would perform this check only when one element is left (when
). This results in a faster comparison loop, as one comparison is eliminated per iteration, while it requires only one more iteration on average.
[ Procedure is described at p. 214 (§43), titled "Program for Binary Search".]
Hermann Bottenbruch published the first implementation to leave out this check in 1962.
# Set
to
and
to
.
# While
,
## Set
(the position of the middle element) to the
ceiling of
, which is the least integer greater than or equal to
.
## If
, set
to
.
## Else,
; set
to
.
# Now
, the search is done. If
, return
. Otherwise, the search terminates as unsuccessful.
Where
ceil
is the ceiling function, the pseudocode for this version is:
function binary_search_alternative(A, n, T) is
L := 0
R := n − 1
while L != R do
m := ceil((L + R) / 2)
if A
> T then
R := m − 1
else:
L := m
if A
= T then
return L
return unsuccessful
Duplicate elements
The procedure may return any index whose element is equal to the target value, even if there are duplicate elements in the array. For example, if the array to be searched was