一下通过Python实现运用二分法分别在10^1-10^8 个元素中查找随机数的代码。
import random, time
def binary_chop(x):
count = 1 # 计数器
numbers = list(range(1, x+1)) # 创建列表
random_number = random.choice(numbers) # 在给定范围内生成随机查找数
print('随机查找数: %s' % random_number)
while True:
if (numbers[-1] + numbers[0]) % 2 == 0: # 如果列表元素个数为奇数
middle_number = int((numbers[0] + numbers[-1]) / 2) # 获取中间数(列表正好有中间数)
else:
middle_number = int((numbers[0] + numbers[-1]) / 2 + 1) # 如果列表元素个数为偶数,中间数为右边一半列表的第一个数
numbers = caculate(random_number, middle_number, numbers)
if numbers == 0:
print('总共需要查找的次数: %s 次' % count)
break
count += 1
def caculate(random_number, middle_number,numbers):
if random_number == middle_number: # 如果恰好随机数在中间则找到该随机数
return 0
e