Python二分查找/折半查找算法详解--(面试常考)

  二分查找也称折半查找(Binary Search),这种搜索算法每一次比较都使搜索范围缩小一半,是一种效率较高的查找方法。

概念

  是一种在有序数组中查找某一特定元素的查询算法。搜索过程从数组的中间元素开始,如果中间元素与要查找的元素相等,则搜索过程结束;如果查找元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中进行查找,而且跟开始一样从中间元素开始比较。重复以上过程,直到找到满足条件的元素,使查找成功,或直到数组为空为止,此时查找不成功。

要求

  必须采用顺序存储结构,且按关键字大小进行有序排列。

代码举例

#coding=utf-8

# 二分查找  (递归)
# 返回 x 在 lists 中的索引,如果不存在返回None
def binarySearch(lists, left, right, x):

    # 如果右边的值大于左边的值
    if right >= left:
        # 取左右两个数的中间值
        mid = (left + (right - left) // 2)

        # 若目标元素正好是中间位置,就返回mid,搜索过程结束
        if lists[mid] == x:
            return mid

        # 元素小于中间位置的元素,比较左边的元素,且移动right下标
        elif lists[mid] > x:
            return binarySearch(lists, left, mid - 1, x)

        # 元素大于中间位置的元素,比较右边的元素,移动left下标
        else:
            return binarySearch(lists, mid + 1, right, x)

    else:
        # 不存在的目标元素的情况就返回None
        return


# 测试举例数组
arr = [1, 2, 3, 4, 5]
x = 6

# 函数调用
result = binarySearch(arr, 0, len(arr) - 1, x)

if result != None:
    print("您输入的元素在数组中的索引为 %d" % result)
else:
    print("您输入的元素不在数组中")



运行结果:
在这里插入图片描述
当x=3时;
运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hanhanwanghaha/article/details/106415168