PHP數組的查找算法 即 找出某個數組中是否存在某個值
1.順序查找 -
就是遍歷數組一個一個進行判斷如果相等表示找到 退出即可
/**
* 數組順序查找某值
* @param array $arr 要檢索的數組
* @param integer $need 要查詢的數
* @return integer 找到返回該數下標 失敗返回false
*/
function gener_search($arr,$need){
foreach ($arr as $k => $v) {
//如果找到 返回該數小標
if ($need === $v) {
return $k;
}
}
//沒找到返回false
return false;
}
二分查找又稱折半查找,
優點是比較次數少,查找速度快,平均性能好;
其缺點是要求待查表爲有序表,且插入刪除困難。
因此,折半查找方法適用於不經常變動而查找頻繁的有序列表
/**
* 數組二分查找
* @param array $arr 需要檢索的數據
* @param integer $need 查找的數
* @param integer $begin 開始的位置 起始(默認)爲0
* @param integer $end 結束位置 默認最後
* @return integer 找到返回該數下標 失敗返回false
*/
$arr = array(2,4,6,10,16,26,42,68,110);
function binary_search($arr, $need, $begin=0, $end=null){
if (is_null($end)) {
$end = count($arr)-1;
}
//得到數組中間位置
$mid_index = floor(($begin+$end)/2);
//中間數如果正好相等 返回索引退出
if ($arr[$mid_index] == $need) {
return $mid_index;
}
//中間數若大於查找數 標識在其左邊 左邊數據遞歸操作
if ($arr[$mid_index] > $need) {
//數組最小數都大於查找數 直接返回false
if ($arr[0] > $need) {
return false;
}
$ret = binary_search($arr, $need, $begin, $mid_index-1);
}else{
if ($arr[$end] < $need) {
return false;
}
$ret = binary_search($arr, $need, $mid_index+1, $end);
}
return $ret;
}