(蓝桥杯 ALGO-379 二分法查找数组元素)


前言

  大概是最后一次参加蓝桥杯,Python组模拟题练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢


问题描述

用递归函数实现二分法查找数组元素。
  补充:要求给定数组采用如下代码定义
  int data[200];
  for (i=0; i<200; i++)
  data[i]=4*i+6;

输入格式

输入一个待查找的整数(该整数一定在数组data中)。

输出格式

该整数在数组中的指标。


样例输入

一个满足题目要求的输入范例。
例1:
262
例2:
438
例3:
774

样例输出

与上面的样例输入对应的输出。
例1:
64
例2:
108
例3:
192

数据规模与约定

输入数据中每一个数的范围。
输入数据必须满足4*i+6,i=0,1,2,3,…,198,199。
时间限制:1.0s 内存限制:256.0MB


一、 解答

1. 代码:

num = int(input())
data = [i*4 + 6 for i in range(200)]#建立data数组,该数组位升序排序
low = 0                             #设定初始上届
high = 200                          #设定初始下届
while True:
    mid = int((low+high)/2)     #中间位置是上下界之和的一半
	
	#如果此时的中间值等于所找的值,说明找到了,结束循环
	#如果此时的中间值不等于所找的值,需要再次进行折半(二分法)查找,选取新的中间值进行对比
    if num == data[mid]:
        print(mid)
        break
    elif num < data[mid]:        #如果所找的数比此刻的中间值小,那说明该在前半段中找
		high = mid               #让此刻的中间值作为下届,上届不变,所查找区域则为前半段
    else:                        #如果所找的数比此刻的中间值大,那说明该在后半段中找
		low = mid                #让此刻的中间值作为上届,下届不变,所查找区域则为后半段

在这里插入图片描述

2. 重点知识:

二分(折半)查找的算法思想


想要遇见什么样的人,先想办法让自己成为那样的人,sincerely,end.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值