数据结构:折半查找/二分查找算法,详解,图解 -- 数据结构算法集

折半查找/二分查找算法

给出一个list和一个元素,判断出list中是否存在该元素

浅短理解:

折半查找算法是对于有序的序列而言的,每次查找后折半,大概缩短了一半的查找区间,是一种效率较高的查找算法。

要求:

list必须是顺序结构,且按照关键词大小进行有序排列。

思路:

在有序序列中查找元素,每次取序列中间的元素,如果与要查找元素相等,程序结束;
如果查找元素大于中间元素,则取中间元素后面的序列再进行如上的查找;
如果查找元素小于中间元素,则取中间元素前面的序列再进行如上的查找;
直到找到元素相等,查找成功,或者序列为空,查找失败,程序结束。
在这里插入图片描述
python版本:Python2.7.5

# _*_ encoding:utf-8 _*_

def binary_search(lists, key, left, right):
	'''
	lists:有序序列/list
	key:要查找的元素
	left:查找的起始位置
	right:查找的结束位置 -方便使用递归
	return:返回查找元素下标
	'''
	# 查找的起始位置大于等于结束位置,查找失败程序结束
	if left >= right:
		return None
	mid = (right - left) // 2 + left		# 折半,中间元素下标

	if lists[mid] > key:
		# 中间元素大于查找元素,则查找前半序列
		return binary_search(lists, key, left, mid - 1)
	elif lists[mid] < key:
		# 中间元素小于查找元素,则查找后半序列
		return binary_search(lists, key, mid + 1, right)
	else:
		# 中间元素等于查找元素,程序结束返回下标
		return mid


if __name__ == '__main__':

	lt = [3,7,10,11,20,33,36,40,88]
	index = binary_search(lt, 33, 0, len(lt))

	print u'元素位置:{}'.format(index) if index else u'没有找到该元素'

运行结果

在这里插入图片描述

文章中有不足之处请多多指教,欢迎讨论,共同学习,共同进步

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值