Algorithms: binary search

From wikinotes

Tutorials

Geeks for Geeks https://www.geeksforgeeks.org/binary-search/

Example

def find(data: List[Dict], id_: str):
    """ Search list-of-dicts for a dict with `id_`

    Args:
        data: ``(ex: [{'id_': '0bac5130b4464968a94c5641306b347e'}, ...])``
            list of dicts

        id_: ``(ex: 'e03977d172534fd7841a0ed7c1a32f7a')``
            id you are searching for
    """
    # data must first be sorted by search-key
    sort(data, key=lambda x: x['id_'])

    # binary search
    min_ = 0
    max_ = len(data)
    while True:
        median = min_ + ((max_ - min_) // 2)
        median_id = data[median]['id_']

        if node_id == median_id:
            return data[median]

        if median in (max_, min_):
            raise IndexError('`id_` not present in `data`: {}'.format(id_))

        if node_id < median_id:
            max_ = median
        elif node_id > median_id:
            min_ = median