python实现二分查找

二分法查找:在一组有序的数据中进行查找,首先与中间的数先比较,如果查找的数大于中间的数,则要查找的数在前半段,否则在后半段,这样就会排除一半的数据,如此递归进行下去,则会极大的提高查找的速度。下面利用python代码实现二分查找

def binary_search(array,key):
    low = 0
    high = len(array) - 1
    while low < high:
        mid = int((low + high)/2)
        if key < array[mid]:
            high = mid - 1
        elif key > array[mid]:
            low = mid + 1
        else:
            return mid
    return False


def main():
    array = [1,2,3,4,5,6,7,8,9,10,14,15,17,21,24,28,35,35,37,39]
    result = binary_search(array,7)
    print(result)
if __name__ == '__main__':
    main()

排序后会返回所查数据在列表中的索引,如果没查找到返回False

面试题:有一递增数值列表list_a,一个数值key, 试着写一个算法,找出列表中第一个大于等于key的数字的下标

import math

def binary_search(array, key):
    low = 0
    hight = len(array) - 1
    while low < hight:
        print(low)
        mid = math.ceil((low+hight)/2)
        if array[mid] < key:
            print("<")
            low = mid
        elif array[mid] > key:
            print(">")
            hight = mid
        else:
            return mid
        if low + 1 == hight:
            break
    return mid

array = [1,2,3,4,6,7]
i = binary_search(array, 5)
print(i)

注:math.ceil()是向上取整

原文地址:https://www.cnblogs.com/Frange/p/8185773.html