PHP二分查找算法示例【遞歸與非遞歸方法】
本文實(shí)例講述了PHP二分查找算法。分享給大家供大家參考,具體如下:
binarySearch
二分查找采用的方法比較容易理解,以數(shù)組為例:
① 先取數(shù)組中間的值floor((low+top)/2),
② 然后通過(guò)與所需查找的數(shù)字進(jìn)行比較,若比中間值大,則將首值替換為中間位置下一個(gè)位置,繼續(xù)第一步的操作;若比中間值小,則將尾值替換為中間位置上一個(gè)位置,繼續(xù)第一步操作
③ 重復(fù)第二步操作直至找出目標(biāo)數(shù)字
比如從1,3,9,23,54 中查找數(shù)字23,
首位置為0, 尾位置為4,中間位置就為2 值為9,比23小,則首位置更新為2+1即3;那么接下來(lái)中間位置就為(3+4)/2=3,值為23,比較相等即找到
// 非遞歸算法:
// $target是要查找的目標(biāo) $arr是已經(jīng)排序好的數(shù)組
function binary(&$arr,$low,$top,$target){
while($low <= $top){
//由于php取商是有小數(shù)的,所以向下取整,不過(guò)也可不加,數(shù)組也會(huì)取整
$mid = floor(($low+$top)/2);
echo $mid."<br>";
if($arr[$mid]==$target){
return $arr[$mid];
}elseif($arr[$mid]<$target){
$low = $mid+1;
}else{
$top = $mid-1;
}
}
return -1;
}
// 遞歸算法:
function binaryRecursive(&$arr,$low,$top,$target){
if($low<=$top){
$mid = floor(($low+$top)/2);
if($mid==$target){
return $arr[$mid];
}elseif($arr[$mid]<$target){
return binaryRecursive($arr,$mid+1,$top,$target);
}else{
return binaryRecursive($arr,$low,$top-1,$target);
}
}else{
return -1;
}
}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php查找技巧與方法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php加密方法總結(jié)》、《PHP編碼與轉(zhuǎn)碼操作技巧匯總》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php正則表達(dá)式用法總結(jié)》、及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP遞歸的三種常用方式
- php遞歸函數(shù)三種實(shí)現(xiàn)方法及如何實(shí)現(xiàn)數(shù)字累加
- PHP 無(wú)限分類三種方式 非函數(shù)的遞歸調(diào)用!
- php菜單/評(píng)論數(shù)據(jù)遞歸分級(jí)算法的實(shí)現(xiàn)方法
- PHP遞歸算法的簡(jiǎn)單實(shí)例
- PHP基于遞歸算法解決兔子生兔子問(wèn)題
- PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹操作示例
- PHP基于二分法實(shí)現(xiàn)數(shù)組查找功能示例【循環(huán)與遞歸算法】
- PHP實(shí)現(xiàn)字符串翻轉(zhuǎn)功能的方法【遞歸與循環(huán)算法】
- PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法示例
- PHP使用遞歸算法無(wú)限遍歷數(shù)組示例
- php獲得文件夾下所有文件的遞歸算法的簡(jiǎn)單實(shí)例
- PHP冒泡算法詳解(遞歸實(shí)現(xiàn))
- 關(guān)于PHP遞歸算法和應(yīng)用方法介紹
- PHP遞歸算法的詳細(xì)示例分析
- php全排列遞歸算法代碼
- php實(shí)現(xiàn)遞歸的三種基本方式
相關(guān)文章
PHP調(diào)用QQ互聯(lián)接口實(shí)現(xiàn)QQ登錄網(wǎng)站功能示例
這篇文章主要介紹了PHP調(diào)用QQ互聯(lián)接口實(shí)現(xiàn)QQ登錄網(wǎng)站功能,結(jié)合實(shí)例形式分析php調(diào)用QQ互聯(lián)接口實(shí)現(xiàn)QQ登錄網(wǎng)站的相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
PHP常量使用的幾個(gè)需要注意的地方(謹(jǐn)慎使用PHP中的常量)
常量包含數(shù)字字母字符和下劃線,數(shù)字允許作為常量名。 常量名的所有字母必須大寫。類常量必須通過(guò) const 定義為類的成員,強(qiáng)烈不鼓勵(lì)使用 define 定義的全局常量2014-09-09
PHP實(shí)現(xiàn)下載斷點(diǎn)續(xù)傳的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)下載斷點(diǎn)續(xù)傳的方法,通過(guò)自定義函數(shù)來(lái)實(shí)現(xiàn)PHP的斷點(diǎn)續(xù)傳下載方法,涉及文件的常見(jiàn)操作與指針和緩沖的用法,代碼中備有較為詳盡的注釋便于閱讀和理解,需要的朋友可以參考下2014-11-11
php批量刪除cookie的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了php批量刪除cookie的簡(jiǎn)單實(shí)現(xiàn)方法,實(shí)例分析了刪除單個(gè)cookie及數(shù)組遍歷的方式批量刪除cookie的技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2015-01-01

