🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
查找算法,就是从一个数组中,找一个“目标”(可以是值,也可以是键)的算法。 数组的查找函数: in_array() :在一个数组中找是否存在某个数据。 array_search() : 在数组中搜索给定的值,如果成功则返回相应的键名 array_key_exists() : 检查给定的键名或索引是否存在于数组中 一种查找算法: 遍历查找:不值得一提! ## 17.7.1.二分查找: 此查找算法针对的数组有以下条件: 1,索引数组; 2,数组是已经排好序的了。 算法演示: ``` $arr1 = [2, 5, 8];//, 10, 15, 18, 22, 24, 24, 28,33, 35, 50, 55, 56, 57, 60, 61, 62, 66, 70]; $search = 3; //具体分析,可以将该数据修改为不同的值,比如:2, 5, 8, ``` //原理:每次都找该数组的某一段的中间项,并跟要找的目标进行“对比” //1,如果刚好相等,则就算找出来了 //2, 如果中间项比目标大,就只要去左边的那一半中找 //3, 如果中间项比目标小,就只要去右边的那一半中找 //假设有这么一个函数,它能够从某个数组$arr中的某个下标范围($start---$end)中找指定的数据$value //这里,假设:$start一定是不能大于$end,否则,我们就认为找不到了! ``` function binary_search($arr, $value, $start, $end) { if($start > $end) { return false; } $mid = floor(($start + $end)/2); //取得两个下标中的中间下标(一半位置) $mid_value = $arr[$mid]; //中间项的值 //如果刚好相等,则就算找出来了 if($mid_value == $value){ return true; } //如果中间项比目标大,就只要去左边的那一半中找 elseif($mid_value > $value) // { $new_start = $start; $new_end = $mid-1; return binary_search($arr, $value, $new_start, $new_end); } //如果中间项比目标小,就只要去右边的那一半中找 else { $new_start = $mid+1; $new_end = $end; return binary_search($arr, $value, $new_start, $new_end); } } $len = count($arr1); $result = binary_search($arr1,$search, 0, $len-1); var_dump($result); ```