PHP实现的折半查找算法示例


Posted in PHP onDecember 19, 2017

本文实例讲述了PHP实现的折半查找算法。分享给大家供大家参考,具体如下:

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

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

实现代码:

<?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);
?>

运行结果:

值为:673
查找次数:4
索引:10
值为:673
查找次数:4

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
MySQL授权问题总结
May 06 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
php strrpos()与strripos()函数
Aug 31 PHP
PHP常用的缓存技术汇总
May 05 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
php下Memcached入门实例解析
Jan 05 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 #PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 #PHP
You might like
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
javascript生成大小写字母
2015/07/03 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
一个基于flask的web应用诞生(1)
2017/04/11 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
公司年会晚宴演讲稿
2014/01/06 职场文书
2014年司机工作总结
2014/11/21 职场文书
2014年民警工作总结
2014/11/25 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python