欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

PHP折半查找

发布时间:2024/9/19 php 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 PHP折半查找 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

定义

折半查找技术,也就是二分查找。它的前提是线性表中的记录必须是关键码有序(通常从大到小有序),线性表必须采用顺序存储。

折半查找的基本思想

取中间记录作为比较对象,若给定值与中间记录的关键字,则在中间记录的关键字相等,则查找成功;若给定值小于中间记录的作伴去继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

实践:

<?phpfunction bin_search($arr, $val) {$low=0;$high=count($arr);$index=0;while ($low <= $high){$mid = intval(($low+$high)/2);$index++;if($arr[$mid] == $val){return "找到了"."_".$arr[$mid]."_"."索引".$mid;}elseif($val>$arr[$mid]){$low=$mid+1;}elseif ($val<$arr[$mid]){$high=$mid-1;}} }$arr = array(1, 3, 5, 7, 7, 9, 25, 68, 98, 145, 673, 8542); echo "开始".PHP_EOL; echo bin_search($arr, 673);//开始 找到了_673_索引10

代码:

<?php //递归方式 function bin_recur_search($arr,$val){global $time;if(count($arr) >= 1){$mid = intval(count($arr) / 2);$time++;if($arr[$mid] == $val){return '值为:'.$arr[$mid].'<br>查找次数:'.$time.'<br>';}elseif($arr[$mid] > $val){$arr = array_splice($arr,0,$mid);return bin_recur_search($arr, $val);}else{$arr = array_slice($arr,$mid + 1);return bin_recur_search($arr, $val);}}return '未找到'.$val; } //非递归方式 function bin_search($arr,$val){if(count($arr) >= 1){$low = 0;$high = count($arr);$time = 0;while($low <= $high){$time++;$mid = intval(($low + $high)/2);if($val == $arr[$mid]){return '索引:'.$mid.'<br>值为:'.$arr[$mid].'<br>查找次数:'.$time;}elseif($val > $arr[$mid]){$low = $mid + 1;}else{$high = $mid - 1;}}}return '未找到'.$val; } $arr = array(1,3,5,7,7,9,25,68,98,145,673,8542); echo bin_recur_search($arr, 673); echo bin_search($arr, 673); ?>

 

总结

以上是生活随笔为你收集整理的PHP折半查找的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。