图解算法笔记:二分查找

二分查找是一种在有序数组中查找某一个特定元素的搜索方法,需要注意,一定得是有序数组。

二分查找算法会先从数组的中间元素开始查找,如果中间元素恰好是要查找的元素,则搜索过程结束;如果不是,则比较该中间元素与要查找的元素,如果中间元素大于了要被查找的元素,则在数组中小于中间元素的部分进行查找;反之则在数组中大于中间元素的部分进行查找。

首先我们可以给出数组的初始位置,结束位置和中间位置:

begin = 0
end = len(list) - 1
mid = (begin + end) / 2

Python语言的第一索引位置是0,因此,数组最后一个元素的索引位置为 数组长度-1。

如果猜的数字小了,我们则可以修改low的数值:

low = mid + 1

反过来,如果猜的数字打了,我们则可以修改high的数值:

high = mid - 1

然后我们可以对这个过程进行循环,直到得到结果:

binary_search(list, item):
	#python的索引位置从0开始
	begin = 0
	#python的数组的最后一个元素的索引位置为数组长度-1
	end = len(list) - 1

	#如果范围没有被缩减到只有一个元素,则继续运行
	while begin <= end:

		#首先,从数组的中间元素开始
                #因为python 3.x 开始将不再自动向下取整,而是保留浮点数,所以需要使用int()函数
		mid = int((begin + end) / 2)
		guess = list[mid]

		#如果中间元素恰好是需要被索引的元素
		if guess == item:
			return mid

		#如果中间元素大于了需要被索引的元素
		if guess > item:
			end = mid - 1
		#如果中间元素小于了需要被索引的元素
		else:
			begin = mid + 1

	#如果需要被索引的元素不在数组里面
	return None

listOne = [1,2,3,4,5,6,7,8,9,10]

print (binary_search(listOne, 8))def binary_search(list, item):
	#python的索引位置从0开始
	begin = 0
	#python的数组的最后一个元素的索引位置为数组长度-1
	end = len(list) - 1

	#如果范围没有被缩减到只有一个元素,则继续运行
	while begin <= end:

		#首先,从数组的中间元素开始
		mid = (begin + end) / 2
		guess = list[mid]

		#如果中间元素恰好是需要被索引的元素
		if guess == item:
			return mid

		#如果中间元素大于了需要被索引的元素
		if guess > item:
			end = mid - 1
		#如果中间元素小于了需要被索引的元素
		else:
			begin = mid + 1

	#如果需要被索引的元素不在数组里面
	return None

我们可以来进行测试:

listOne = [1,2,3,4,5,6,7,8,9,10]

print (binary_search(listOne, 8))

得到结果为:

7

因为Python是的索引位置是从0开始,所以是7,而不是8。

如果有一个列表含有一个n个元素并且该列表是一个有序列表,那么使用二分法查找在其中查找一个名字,需要的最多步骤为:

log(2)nlog⁡(2)n

如果是一个128个元素的有序列表,那么采用二分查找法来在其中查找一个名字所需的最多步骤为7步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值