1. 程式人生 > >php 二叉樹演算法小解

php 二叉樹演算法小解

前段時間出去面試,被問到如果從一個數組中快速找到某一個元素在該陣列的位置。我當時大概想到他是想問我演算法,當時不是很清楚怎麼寫,就用說切割字串,用字串函式去找,當時想的是字串函式查詢起來挺方便的。面試官直接說。我給的陣列很小,如果很大怎麼辦。肯定不能用你這種方法,他說用二叉樹,面試完之後自己回去查了所謂的二叉樹,自己寫了小demo試了一下,確實不錯。不多說了,慚愧,寫php的竟然一點演算法都不懂。。上程式碼

$a = [2,55,6,789,33,87,555,743];
sort($a);
function halfSearch($array, $find, $start, $end)
{
if($start > $end){ return -1;//這裡是找不到元素的情況 } $mid = floor(($end + $start)/2); if($array[$mid] == $find){ return $mid; }elseif($array[$mid] > $find){ //只需要去前半部分找即可 return halfSearch($array, $find, $start, $mid-1); }elseif($array[$mid] < $find
){ //只需要去後半部分找即可 return halfSearch($array, $find, $mid+1, $end); } } $b = halfSearch($a, 33, 0, count($a)-1); echo $b;

我大概講解下思路,其實主要是分割陣列中元素,獲取中間的元素值與被查詢的值做比較,從而減小查詢範圍,跟我們平常的快速排序有異曲同工之妙。