import re
def binary_search(num_list, x):
# 二分查找
left, right = 0, len(num_list)
while True:
while left < right:
mid = (left + right) // 2
if num_list[mid] > x:
right = mid
elif num_list[mid] < x:
left = mid + 1
else:
return '待查元素{0}在列表中下标为:{1}'.format(x, mid)
return '待查找元素%s不存在指定列表中' % x
def is_float(a):
# 判断是否为浮点数
value = re.compile(r'^[-+]?[0-9]+\.[0-9]+$')
result = value.match(a)
if result:
return a
def bubble_sort(lists):
# 利用冒泡排序对用户输入的数组排序
count = len(lists)
for i in range(0, count):
for j in range(i + 1, count):
if lists[i] > lists[j]:
lists[i], lists[j] = lists[j], lists[i]
print("排序后的数组为:", lists)
def receive_list():
# 接收用户输入,形成数组(列表)
while True:
a = input("请输入数组元素,输入“exit”结束:")
if a.isdigit():
a = int(a)
list_one.append(a)
print("请继续输入数组元素,或者输入“exit”结束输入")
elif is_float(a):
a = float(a)
list_one.append(a)
print("请继续输入数组元素(输入“exit”结束输入):")
elif a == "exit":
break
else:
print("您输入的“%a”不是数字,请重新输入" % a)
print("当前已输入数组为:", list_one)
if __name__ == "__main__":
list_one = []
receive_list()
bubble_sort(list_one)
while True:
item = float(input("请输入您要查找的元素(输入“exit”结束查找):"))
print(binary_search(list_one, item))
if item == "exit":
break
运行结果:
程序包括用户输入判断,如浮点数,整数,字母,汉字都能进行相应的判断,我写的这个是允许数组中(列表)出现整数和浮点数,为了防止用户输入的不是一个有序数组,在用户输入数组后进行了一次冒泡排序,因为众所周知,二分搜索树是在一个有序的数组中,不断折半、判断的过程,所以进行了一个冒泡排序,
其实算法的思想是一样的,不管用什么语言来写,都是大同小异,无非是某些语言中有一些第三方库和函数。
我的环境是python3.6.4(包:re(用来匹配正则))