A search algorithm which uses the properties of an ordered data structure to improve performance. The main idea of the search is to examine a value near the middle of the structure, and based on whether this value is too high or low, repeat the process on appropriate subset. Typically applied to arrays, vectors, and binary search trees.