二分查找概述
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
代码实现
# coding=utf-8
def binary_search(array,x):
'''
:param array: 有序表
:param x: 待查元素
:return: 返回待查元素的index, 没有返回 -1
'''
low = 0
high = len(array)-1
while low <= high :
mid = (low + high) // 2
if array[mid] == x :
return mid
#左半边
elif array[mid] > x :
high = mid -1
#右半边
else :
low = mid + 1
#未找到返回-1
return -1
if __name__ == '__main__':
mylist = [1, 2, 4,5, 6, 7, 13, 21, 25, 27, 31, 34, 36, 37, 47, 67, 98]
ret = binary_search(mylist,5)
print("ret:%s" % ret)
查找过程图解
待查元素 x =5
待查元素 x =36
总结
二分查找要求 序列 为有序的, 如果 序列无序 要进行 排序 ,才能进行查找。 二分查找 每次 都能 过滤掉一半的元素,效率还是挺高的。
分享快乐,留住感动。 2017年10月24日 16:29 ---biaoge