二分查詢,在乙個有序的陣列中,查詢某個元素。
比如:有序陣列array(1,3,4,5,7,9,10),查詢9。
問題分析:將陣列分成左右兩個陣列,查詢mid值。如果mid值 > 9 ,從左邊陣列查詢,如果 <9 從右邊查詢。
分解過程:
1 mid = (0 + 6 ) / 2 = 3 ,查詢mid=3的值,是5。
2 5 != 9,將陣列分成(1,3,4,5),(7,9,10)
3 5 < 9 ,從右側查詢(7,9,10)
在(7,9,10)中查詢,9,重複1,2,3步驟
<?php
function
search
($val
,$start
,$end
,$data
)$mid=(
$start
+$end)/
2;if(
$data
[$mid]==
$val
)//查詢左邊if(
$data
[$mid
]>
$val
)//查詢右邊
return
search
($val
,$mid+1
,$end
,$data);
}$data
=array(1
,3,4
,5,7
,9,10
);$idx
=search(1
,0,count
($data)-
1,$data);
print_r
($idx);
echo
"\n"
;$idx
=search
(123,0
,count
($data)-
1,$data);
print_r
($idx
);
主要通過while模擬遞迴的過程
<?php
function
search
($val
,$data)if
($data
[$mid
]>
$val
)else
}return
$idx;}
$data
=array(1
,3,4
,5,7
,9,10
);$idx
=search(7
,$data);
echo
",\n"
;?>
二分查詢演算法(遞迴 非遞迴)
二分查詢 binary search 先來個比較官方的解釋 二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如...
二分查詢演算法(遞迴 非遞迴)
二分查詢是針對有序序列來說的,在有序序列中使用二分查詢能大大提高查詢效率。首先確定整個查詢區間的中間位置 mid 用待查關鍵字key值與中間位置的關鍵字值進行比較 若相等,則查詢成功 若大於,則在後 右 半個區域繼續進行折半查詢 若小於,則在前 左 半個區域繼續進行折半查詢 對確定的縮小區域再按折半...
遞迴 分治策略 二分查詢的遞迴與非遞迴
規模問題 分治策略,將乙個難以解決的規模大的問題,分解成一些規模較小的相同問題 includeusing namespace std int fac unsigned int n 用遞迴解決階乘 int fun unsigned int n 用迴圈解決階乘 return sum int main e...