#!/usr/bin/python
# 输入的列表必须是已经排好序的列表
def binary_search(li, val):
    left = 0 #定义开始范围
    right = len(li)-1  #定义查找结束范围
    while left <= right: #如果左边的值小于右边的值 证明候选区还有值 继续循环查找
        mid = (left+right) // 2 #获取候选区中间的值
        if li[mid] == val:  #如果中间值等于要查找的值 则结束算法
            print mid
            return
        elif li[mid] > val: # 如果中间的值大于要查找的值 则证明右边的范围值需要按照中间值进行折半 mid-1 是不需要和原来的中间值比较
            right = mid - 1
        else:#li[mid] < val
            left = mid+1 # 如果中间的值小于要查找的值 则证明左边的范围值需要按照中间值进行折半 mid+1 是不需要和原来的中间值比较
    else:
        print "none" # 否则就是没找到值

#时间复杂度 O(logn) 相比线性查找效率更高
02-10 02:13