首页 - 技术 - Pythonic版二分查找实现过程原理分析

Pythonic版二分查找实现过程原理分析

2023-10-02 07:10

前提:数组按升序排列,且要查找的元素在数组中。

二分查找:是一个递归函数 c.要检查的元素a是当前数组中值b。如果 b=a,则返回 b 的索引。如果b>a,则在b左侧的子数组中调用函数c。否则,将在 b 右侧的子数组中调用函数 c。

我第一次想到,按照上面的思路编程后的结果:

def binary_search(索引, a, 值):
  if a[(len(a) - 1) // 2] == 值:
    返回索引 + (len(a) - 1) // 2
  elif a[(len(a) - 1) // 2] < 值:
    return binary_search(index + (len(a) - 1) // 2 + 1, a[(len(a) - 1) // 2 + 1:], value)
  别的:
    return binary_search(index, a[0:(len(a) - 1) // 2 + 1], value)

第二个思考,简化中位数计算逻辑:

def binary_search(索引, a, 值):
  如果 a[len(a) // 2] == 值:
    返回索引 + len(a) // 2
  elif a[len(a) // 2] < 值:
    返回binary_search(index + len(a) // 2, a[len(a) // 2:], value)
  别的:
    返回binary_search(index, a[0:len(a) // 2], value)

第三个想法,去掉return,改成lambda形式:

binary_search = lambda索引,a,值:index + len(a) // 2 if a[len(a) // 2] == value else binary_search(index + len(a) // 2, a[ len(a) // 2:], value) if a[len(a) // 2] < value else binary_search(index, a[0:len(a) // 2], value)