使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组。

1. 顺序查找算法
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}
else{
return -1;
}
}
===========================================
//顺序查找
$arr = array( 1,3,6,8,23,69,100);
var_dump(check_order($arr, 5));
function check_order($arr, $num){
//全部匹配
$len = count($arr);
for ($i=0; $i < $len; $i++) {
//判断
if($arr[$i] == $num){
return $i;
}
}
return false;
}2 . 二分查找算法
2.1二分查找的定义:
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
2.2算法的要求:
从上面的定义我们可以知道,满足该算法的要求必须如下两点:
必须采用顺序存储结构。
必须按关键字大小有序排列。
2.3算法的步骤
其实,二分查找也还是比较容易理解的,大概就是一分为二,然后两边比较,保留有效区间,继续一分为二查找,直到找到或者超出区间则结束,所以二分查找的基本步骤是:
确定要查找的区间
确定要二分时的参照点
区间内选取二分点
根据二分点的值,综合左右区间情况以及求解的目的,舍去一半无用的区间
继续在有效区间重复上面的步骤
这里,我主要采用递归和非递归两种方法实现,具体如下:
//二分查找-递归(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}
elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}
else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
=======================================
//二分查找-非递归
function check_break($arr,$res){
//1. 得到数组边界
$right = count($arr);
$left = 0;
//2. 循环匹配
while ($left <= $right) {
//3. 得到中间位置
$middle = floor(($right + $left) /2 );
//4. 匹配数据
if($arr[$middle] == $res){
return $middle+1;
}
//5. 没有找到
if($arr[$middle] < $res){
//值在右边
$left = $middle + 1;
}else{
//值在左边
$right = $middle - 1;
}
}
return false;
}
$arr = array( 1,3,6,8,23,69,100);
var_dump(check_break($arr, 100));本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn