php 二分查找

<?php
/**二分查找:查找一个值在数组中的位置
* @$arr:操作的数组,前提是按顺序排列
* @$val:查找的值
* @$start:查找的起始位置,默认从数组的第一个数找起
* @$end:查找的结束位置
**/
function binarySearch($arr, $val, $end, $start=0){
    while($start <= $end){
        $mid = ceil($start + ($end - $start) / 2);
        if($arr[$mid] == $val){
            return $mid;
        }elseif($arr[$mid] > $val){
            $end = $mid -1;
        }else{
            $start = $mid +1;
        }
    }
    return -1;   //这里的-1,是表示如果不在数组范围的时候,所返回的值
}


header('Content-Type:text/html; charset=utf-8');
//产生一个数组 $arr = range(10,20); echo '<pre>'; print_r($arr); echo '</pre>'; $start = 0; $end = count($arr) - 1; $findVal = rand(10,20 ); $index = binarySearch($arr, $findVal, $end, $start); printf("查找的值 '%d' 在数组中的下标 '%s'", $findVal, $index); ?>

 

posted @ 2013-08-03 18:34  午时的海  阅读(178)  评论(0编辑  收藏  举报