一、查找的方法
顺序查找 、二分查找
二、顺序查找:
对某个数组,按照顺序,一个一个比较,找到你要的数据。
三、顺序查找的案例:
<?php
header('content-type:text/html;charset=utf8');
function SeqSearch($arr,$num) //定义一个顺序查询的方法
{
foreach ($arr as $k => $v) {
if ($v == $num) { //若数组中存在待查询的值$arr
return $k; //返回查询到的数的下标
}
}
echo "查询无结果"; //没有查到返回“查询无结果”
}
$arr=[1,2,5,7,9,8,6,4]; //要查询的数组
$num=5; //待查询的数
echo SeqSearch($arr,$num)."<br>";
?>
四、二分查找:
首先找到数组中间这个数,然后与要查找的数比较,如果要查找的数大于中间这个数,则说明应该向后找,否则向前找,如果想等,则说明找到。
前提:该数组必须是有序数列,如果该数组无序,必须先排序后查找
五、二分查找的示例
<?php
//这仅仅是二分查找最为简单的一个实现
//定义一个二分递归查找方法
function BinSearch($arr,$num,$low,$high)
{
if ($low <= $high) {
$mid=floor(($low+$high)/2); //中间数的下标
if ($arr[$mid] == $num) { //若中间数等于要查询的数,则返回中间数的下标
return $mid;
}
else if ($arr[$mid] < $num) {
return BinSearch($arr,$num,$mid+1,$high); //若中间数小于要查询的数,中间数下标加1
}
else if ($arr[$mid] >$num)
{
return BinSearch($arr,$num,$low,$mid-1); //若中间数大于要查询的数,中间数作为最大值下标减1
}
}
else
{
return "查不到,好无奈!";
}
}
$arr=[1,2,3,4,5,6,7,8,9]; //待查找的数组
$low=2; //数组的开始位置
$high=count($arr)-1; //数组的最大位置
$num=9; //需要查找的数字
echo BinSearch($arr,$num,$low,$high);