<?php |
/** |
* 查找 |
* |
**/ |
// 顺序查找 |
function normal_search( $arrData , $val ) { |
$len = count ( $arrData ); |
if ( $len == 0) return -1; |
for ( $i = 0; $i < $len ; $i ++ ) { |
echo "find No." , $i + 1, " value = " , $arrData [ $i ], " is = " , $val , "? <br/>" ; |
// 找到了 |
if ( $arrData [ $i ] == $val ) return $i ; |
} |
return -1; |
} |
// 测试顺序查找 |
$arrData = array (4,51,6,73,2,5,9,33,50,3,4,6,1,4,67); |
echo normal_search( $arrData ,6), "<br/>" ; |
echo normal_search( $arrData ,66), "<br/>" ; |
// 二分法查找(针对有序的列进行查找) |
function binary_search( $arrData , $val ) { |
$len = count ( $arrData ); |
if ( $len == 0) return -1; |
$start = 0; |
$end = $len - 1; |
while ( $start <= $end ) { |
$middle = intval (( $start + $end )/2); |
echo "start = " , $start , " end = " , $end , " middle = " , $middle , "<br/>" ; |
if ( $arrData [ $middle ] == $val ) { |
return $middle ; |
} elseif ( $arrData [ $middle ] > $val ) { |
$end = $middle - 1 ; |
} elseif ( $arrData [ $middle ] < $val ) { |
$start = $middle + 1; |
} |
} |
return -1; |
} |
// 测试一下二分法查找 |
$arrData = array (1,2,3,4,5,7,8,9,11,23,56,100,104,578,1000); |
echo binary_search( $arrData ,578), "<br/>" ; |
echo binary_search( $arrData ,66), "<br/>" ; |