欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 算法----二分法找出有序列表指定值

算法----二分法找出有序列表指定值

2025/2/25 20:19:07 来源:https://blog.csdn.net/qq_68809241/article/details/143819821  浏览:    关键词:算法----二分法找出有序列表指定值
#第一种:先判断在查询
def BinarySearch(arr,key):min=0max=len(arr)-1if key in arr:while True:center=int((min+max)/2)if arr[center]>key:max=center-1elif arr[center]<key:min=center+1elif arr[center]==key:print(str(key)+"在数组里面的第"+str(center)+"个位置")return arr[center]else:print("没有该数字!")
if __name__=="__main__":arr=[1,6,9,15,26,38,49,57,63,77,81,93]while True:key=input("请输入你要查找的数字:")if key== "   ":print("谢谢使用!")breakelse:BinarySearch(arr,int(key))
# 第二种:判断某个元素是否在列表中
#子问题算法(子问题规模为1)
def is_in_list(init_list,e1):return [False,True][init_list[0]==e1]
#分治算法
def solve(init_list,e1):n=len(init_list)if n==1:#若问题规模等于1,直接解决return is_in_list(init_list,e1)#分解(子问题规模为n/2)left_list,right_list=init_list[:n//2],init_list[n//2:]#递归(树),分治,合并res=solve(left_list,e1) or solve(right_list,e1)return res
if __name__=='__main__':#测试数据test_list=[12,2,23,45,67,3,2,4,45,63,24,23]#查找print(solve(test_list,45))print(solve(test_list,5))
# 第三种:找出有序列表中的指定值
data = [1, 3, 6, 13, 56, 123, 345, 1024, 3223, 6688]def dichotomy(min, max, d, n):"""min表示有序列表头部索引max表示有序列表尾部索引d表示有序列表n表示需要寻找的元素"""if min > max:  # 终止条件,当查找区间不存在时表示没找到return Nonemid = (min + max) // 2  # 整除,确保mid是整数类型索引if d[mid] < n:print("向右侧找!")return dichotomy(mid + 1, max, d, n)  # 更新区间时,mid + 1避免重复检查当前mid位置元素elif d[mid] > n:print("向左侧找!")return dichotomy(min, mid - 1, d, n)  # 同理,mid - 1避免重复检查else:print('找到了%s' % d[mid])return d[mid]  # 返回找到的元素res = dichotomy(0, len(data) - 1, data, 56)  # 这里max索引应该是len(data) - 1,因为索引从0开始
print(res)
运行结果:

第二种:
 

 

第三种:
 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词