PHP實(shí)現(xiàn)的折半查找算法示例
本文實(shí)例講述了PHP實(shí)現(xiàn)的折半查找算法。分享給大家供大家參考,具體如下:
定義:折半查找技術(shù),也就是二分查找。它的前提是線性表中的記錄必須是關(guān)鍵碼有序(通常從大到小有序),線性表必須采用順序存儲(chǔ)。
折半查找的基本思想:取中間記錄作為比較對(duì)象,若給定值與中間記錄的關(guān)鍵字,則在中間記錄的關(guān)鍵字相等,則查找成功;若給定值小于中間記錄的作伴去繼續(xù)查找;若給定值大于中間記錄的關(guān)鍵字,則在中間記錄的右半?yún)^(qū)繼續(xù)查找。不斷重復(fù)上述過(guò)程,直到查找成功,或所有查找區(qū)域無(wú)記錄,查找失敗為止。
實(shí)現(xiàn)代碼:
<?php
//遞歸方式
function bin_recur_search($arr,$val){
global $time;
if(count($arr) >= 1){
$mid = intval(count($arr) / 2);
$time++;
if($arr[$mid] == $val){
return '值為:'.$arr[$mid].'<br>查找次數(shù):'.$time.'<br>';
}elseif($arr[$mid] > $val){
$arr = array_splice($arr,0,$mid);
return bin_recur_search($arr, $val);
}else{
$arr = array_slice($arr,$mid + 1);
return bin_recur_search($arr, $val);
}
}
return '未找到'.$val;
}
//非遞歸方式
function bin_search($arr,$val){
if(count($arr) >= 1){
$low = 0;
$high = count($arr);
$time = 0;
while($low <= $high){
$time++;
$mid = intval(($low + $high)/2);
if($val == $arr[$mid]){
return '索引:'.$mid.'<br>值為:'.$arr[$mid].'<br>查找次數(shù):'.$time;
}elseif($val > $arr[$mid]){
$low = $mid + 1;
}else{
$high = $mid - 1;
}
}
}
return '未找到'.$val;
}
$arr = array(1,3,5,7,7,9,25,68,98,145,673,8542);
echo bin_recur_search($arr, 673);
echo bin_search($arr, 673);
?>
運(yùn)行結(jié)果:
值為:673 查找次數(shù):4 索引:10 值為:673 查找次數(shù):4
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP 冒泡排序 二分查找 順序查找 二維數(shù)組排序算法函數(shù)的詳解
- php二分查找二種實(shí)現(xiàn)示例
- php順序查找和二分查找示例
- php數(shù)據(jù)結(jié)構(gòu)與算法(PHP描述) 查找與二分法查找
- 解析php二分法查找數(shù)組是否包含某一元素
- PHP二分查找算法示例【遞歸與非遞歸方法】
- PHP二分查找算法的實(shí)現(xiàn)方法示例
- PHP基于二分法實(shí)現(xiàn)數(shù)組查找功能示例【循環(huán)與遞歸算法】
- PHP實(shí)現(xiàn)的二分查找算法實(shí)例分析
- PHP折半(二分)查找算法實(shí)例分析
相關(guān)文章
在php和MySql中計(jì)算時(shí)間差的方法詳解
這篇文章主要介紹了在php和MySql中計(jì)算時(shí)間差的方法詳解的相關(guān)資料,需要的朋友可以參考下2015-03-03
php時(shí)區(qū)轉(zhuǎn)換轉(zhuǎn)換函數(shù)
godaddy主機(jī)在國(guó)外。把站點(diǎn)建站國(guó)外,顯示時(shí)間時(shí)可能需要時(shí)區(qū)轉(zhuǎn)換,下面是個(gè)方便的工具函數(shù),用于時(shí)區(qū)轉(zhuǎn)換2014-01-01
關(guān)于PHP的curl開(kāi)啟問(wèn)題探討
新浪提供的PHP SDK里需要用到curl_init()函數(shù),在調(diào)試的時(shí)候報(bào)找不到curl_init()的方法,下面為大家介紹下開(kāi)啟curl的步驟2014-04-04
php算開(kāi)始時(shí)間到過(guò)期時(shí)間的相隔的天數(shù)
php算開(kāi)始時(shí)間到過(guò)期時(shí)間的相隔的天數(shù),同理可以實(shí)現(xiàn)相隔年,小時(shí),分,秒等數(shù)2011-01-01

