比较完整的二分搜索问题

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

 

运行结果:

比较完整的二分搜索问题_第1张图片

程序包括用户输入判断,如浮点数,整数,字母,汉字都能进行相应的判断,我写的这个是允许数组中(列表)出现整数和浮点数,为了防止用户输入的不是一个有序数组,在用户输入数组后进行了一次冒泡排序,因为众所周知,二分搜索树是在一个有序的数组中,不断折半、判断的过程,所以进行了一个冒泡排序,

其实算法的思想是一样的,不管用什么语言来写,都是大同小异,无非是某些语言中有一些第三方库和函数。

我的环境是python3.6.4(包:re(用来匹配正则))

你可能感兴趣的:(算法,Python)