杉哥的个人博客

php、python3实现二分法查找

二分法查找的思路如下:

1、首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

2、如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

3、如果某一步数组为空,则表示找不到目标元素。

php版:

<?php
function binarySearch($array, $val) {
    $count = count($array);
    $low = 0;
    $high = $count - 1;
    while ($low <= $high) {
        $mid = intval(($low + $high) / 2);
        if ($array[$mid] == $val) {
            return $mid;
        }
        if ($array[$mid] < $val) {
            $low = $mid + 1;
        } else {
            $high = $mid - 1;
        }
    }
    return false;
}

python3版:

def binary_search(list,item):#list必须是按从小到大排好序的序列
    low=0
    height=len(list)-1

    while low <= height:
        mid=(low+height)//2
        #print(mid)
        guess=list[mid]
        if guess==item:
            return mid
        if guess < item:
            low=mid+1
        else:
            height=mid-1
    return None

print(binary_search([1,2,3,4,5],4))