查找算法
1、顺序查找,适用于乱序数组。
2、二分查找,适用于已排序数组。
演示示例
$arr = array(1,3,5,2,7,4,8);//乱序数组
$value = 2;//查找值
$search = new Search($arr);//实例化查找类
$index = $search->sequence($value);//调用顺序查找方法,返回索引,未找到返回-1
//已排序数组
$arred = array(1,2,3,5,6,8,9);
$search = new Search($arred);
$index = $search->binary($value);//调用二查找方法
PHP查找类
/*
* 查找类
*/
class Search{
protected $data;
function __Construct($arr){
$this->data = $arr;
}
/*
* 顺序查找
* @适用于无序数组
*/
public function sequence($value){
$len = count($this->data);
for($i=0;$i<$len;$i++){
if($this->data[$i] == $value){
return $i;
}
}
return -1;
}
/*
* 二分查找法
* @适用于已排序数组
*/
public function binary($value){
$left = 0;
$right = count($this->data) -1;
while($left<=$right){
$index = intval(($right + $left)/2);
if($this->data[$index] == $value)
{
return $index;
}
if($this->data[$index]<$value)
{
$left = $index + 1;continue;
}
if($this->data[$index]>$value)
{
$right = $index - 1;
}
}
return -1;
}
}