1,二分查詢法,就相當是在迴圈中邊比較邊排除的一種搜尋定位的方法,迴圈次數比我們平時的逐步搜尋少,效能高
2,簡單來講,就是在必須是有序的序列中,尋找某個值,通過一分為二的比較排除,減少比較次數
3,每次排除都把所有的情況分成"可能"和"不可能"兩種,然後拋棄所有"不可能"的情況.
因為二分查詢,也是在迴圈中比較查詢,所以一定少不了迴圈。
首先就會想到用迴圈和遞迴(其實遞迴本質上也是一種迴圈)。
在不斷的迴圈比較中,$min和$max會越來越接近,到最後達到一致或者違背序列。這個也正好就是迴圈條件或者遞迴條件
核心就是在每次比較之後對$min,$max,$mid的處理。
總結:<?php
header('content-type:text/html;charset=utf-8');
//二分查詢法
$test_arr = array(1,2,4,5,6,7,8,9,13,35,46,67,79,123,345,567,678,879);
echo "";
print_r($test_arr);
//**方法1,迴圈**
function binarysearch($arr,$target)
elseif($arr[$mid] < $target)else
}return '陣列不符合條件';
}//方法2,遞迴
function binarysearchrecursion(&$arr,$min,$max,$target)
elseif($arr[$mid] < $target)else}}
$res = binarysearchrecursion($test_arr,0,17,5);
echo $res;
?>
其實遞迴的方法可以不要$min,$max引數,在比較完成後直接把陣列處理後傳入即可。
複習:
array_slice() //取出一段
array_splice() //去掉一部分並且用其他的替代
array_chunk() //分割
floor() //四捨五入
二分查詢法
二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢法的優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者...
二分查詢法
有序陣列中的find 方法 public int find long serchkey int lowerbound 0 int upperbound nelems 1 while true curin lowerbound upperbound 2 if a curin serchkey retu...
二分查詢法
演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止...