二分查找算法 php

<?php
/**
 * 二分查找算法 (查找一個值在有序數組中的位置)
 *
 * @param array $arr 有序數組
 * @param int $val 查找的數值
 * @return int 查找值存在返回數組下標,不存在返回-1
 */
function binary_search($arr,$val)
{
    $l = count($arr); //獲得有序數組長度
    $low = 0; //查找的起始位置,默認從數組的第一個數找起
    $high = $l -1; //查找的結束位置
    while($low <= $high)
    {
        $middle = floor(($low + $high) / 2);
        if($arr[$middle] == $val) {
            return $middle;
        }elseif($arr[$middle] > $val) {
            $high = $middle - 1;
        }else{
            $low = $middle + 1;
        }
    }
    return -1;
}
//示例
$arr = array(1,2,3,4,5,6,7,8,9,12,23,33,35,56,67,89,99);
echo binary_search($arr,56);
?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章