一、查找算法含义
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是最常用的基本运算。查找算法的含义是实现查找过程对应的代码结。就是在大型数组中快速定位想要的元素。
二、顺序查找算法
定义:顺序查找算法也成为线性查找,从数据结构线形表的一端开始,顺序扫描,一次将扫描到的结点,关键字与给定的值k进行比较。若相等表示查找成功,若扫描结束且没有找到关键字等于k的结点,表示查找失败。
<?php
header("content-type:text/html;charset=utf-8");
$arr=array(1,2,3,4,5,7);
//顺序查找,从数组第一个函数开始依次匹配
function check_order($arr,$num){
//全部匹配
for($i=0,$len=count($arr);$i<$len;$i++){
//判断
if($arr[$i]==$num){
return $i;
}
}
return false;
}
var_dump(check_order($arr,5));
输出
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181225134126969.png)
## 三、二分法查找算法
二分查找要求线形表中的结点按关键字值的升序或降序排列,用给定值k先于中间结点的关键字比较,中间结点把线形表分成2个子表,若相等则查找成功,若不相等,再根据k与该中间的结点关键字的比较结果确定下一步查找哪个字表,这样递归进行,直达找到,或者发现表中无这样的结点。
折半算法的思路:
1.计算数组的长度
2.确定左右2边的指针位置
3.找到中间位置
4.匹配
5.根据大小重定边界。
<?php
header("content-type:text/html;charset=utf-8");
//二分法查找算法
$arr=array(1,2,3,4,5,7);
//得到数组边界
$res=3;
function check_break($arr,$res){
$right=count($arr);
$left = 0;
//循环匹配
while($left<=$right){
//得到中间位置
$middle = floor(($right+$left)/2);
//匹配数据
if($arr[$middle]==$res){
return $middle+1;
}
//没有找到
if($arr[$middle]<$res){
//值在右边
$left = $middle+1;
}
else{
//值在左边
$right=$middle-1;
}
}
return false;
}
var_dump(check_break($arr,$res));
输出
float(3)