二分查找

二分查找法

算法复杂度:log2n
简单查找复杂度:n

输入,输出

输入的是一个有序列表,一个查找的值,输出一个值的位置,可能为空。

设计与实现

数据结构: 数组
查找元素的范围: array[0] <= 查找的元素 <= array[arrray.length-1]

设计

二分查找1.jpg

查找范围在low和high之间
low = 0
high = array.length - 1

二分查找2.jpg

查找的值和mid比较,mid是中间值,因为数组中元素已经排过序了,mid应该是个整数,除不尽向下取整

实现

def binary_search(list, item):
    low = 0
    high = len(list) - 1
    while low <= high:
        mid = (low + high) / 2
        guess = list[mid]
        if guess == item: //找到了元素,返回下标
            return mid
        if guess > item: //猜的元素在左边
           high = mid - 1
        else:
            low = mid + 1 //猜的元素在右边
    return None;


print binary_search([1,2,3,4,6,8], 4)

关键点

  • 输入数据是有序列表
  • 选中间值进行比较
  • 算法复杂度log2n

你可能感兴趣的:(二分查找)