二分查找算法原理与Python实现

二分查找算法原理与Python实现

    • 二分查找的前提
    • 二分查找的原理
    • Python实现
    • 需要注意的坑

二分查找的前提

  要求查找的数据有序排列。

二分查找的原理

  先以数据的最小值为下界,最大值为上界,将要查找的数与当前数据中间的数进行对比,如果大了,就以当前中间数为新的下界,重新计算中值后对比;如果小了,就以当前中间数为新的上界,重新计算中值后对比;直到找到该数。

Python实现

% 目的是查找目标数在数组中的位置
def binary_search(num, item): % num是目标数组,item 是待查找的目标数
	low = 0 % 下界,有序列表第一个元素的索引
	high = len(num)-1 % 上界,列表最后一个元素的索引
	while low <= high % 确定查找的停止条件,即所查找的范围中一个元素都不剩
		mid = (low + high)//2 % 计算中值元素所在的索引,这里使用整除,会向下取整;
		guess = num[mid] % 找到对应的中值元素
		if item == guess:
			return mid
		if item > guess: % 当要查找的数更大时,此时需要将下界更换成当前的mid
			low = mid + 1 % 为了避免要查找的数是列表边界值从而陷入死循环,对下界值往后挪一位(不往前挪一位是因为下界往前挪一位可能没有元素了)
		elif item < guess:
			high = mid - 1 % 为了避免要查找的数是列表边界值从而陷入死循环,对上界值往前挪一位(不往后挪一位是因为上界往后挪一位可能没有元素了) 
	return None
num = [1, 2, 3]
item = 2
binary_search(num, item) # 返回索引为1

需要注意的坑

  (1)数组必须是有序的;
  (2)下界变更时往后挪一位和上界变更时往前挪一位——可以以如下的例子来理解:对于上界向前挪一位,假如要查找的数是5,在[0,1,2,3,4,5]中查找,如果不挪会陷入4的死循环;对于下界向后挪一位,假如要查找的数是0,在[0,1,2,3,4,5]中查找,如果不挪会陷入1的死循环。

你可能感兴趣的:(Python)