前言
大概是最后一次参加蓝桥杯,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. 重点知识:
二分(折半)查找的算法思想