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


Posted in PHP onOctober 09, 2017

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

什么是折半查询算法?具体文字描述自己百度。直接上代码:

<?php
header("Content-type: text/html; charset=utf-8");
/* 折半查询算法--不用递归 */
function qSort($data = array(), $x = 0){
 $startIndex = 0;    // 开始索引
 $endIndex = count($data) - 1; // 结束索引
 $index = 0;
 $number = 0;     // 计数器
 do{
  if($endIndex > $startIndex){
   $searchIndex = ceil(($endIndex - $startIndex) / 2);
  }else if($endIndex == $startIndex){
   $searchIndex = $endIndex;
  }else{
   $index = -1;
   break;
  }
  $searchIndex += ($startIndex - 1);
  echo '检索范围:'.$startIndex.' ~ '.$endIndex.'<br>检索位置:'.$searchIndex.'检索值为:'.$data[$searchIndex];
  echo '<br>=======================<br><br>';
  if($data[$searchIndex] == $x){
   $index = $searchIndex;
   break;
  }else if($x > $data[$searchIndex]){
   $startIndex = $searchIndex + 1;
  }else{
   $endIndex = $searchIndex - 1;
  }
  $number++;
 }while($number < count($data));
 return $index;
}
/* 折半查询算法--使用递归 */
function sSort($data, $x, $startIndex, $endIndex){
 if($endIndex > $startIndex){
  $searchIndex = ceil(($endIndex - $startIndex) / 2);
 }else if($endIndex == $startIndex){
  $searchIndex = $endIndex;
 }else{
  return -1;
 }
 $searchIndex += ($startIndex - 1);
 echo '检索范围:'.$startIndex.' ~ '.$endIndex.'<br>检索位置:'.$searchIndex.'检索值为:'.$data[$searchIndex];
 echo '<br>=======================<br><br>';
 if($data[$searchIndex] == $x){
  return $searchIndex;
 }else if($x > $data[$searchIndex]){
  $startIndex = $searchIndex + 1;
  return sSort($data, $x, $startIndex, $endIndex);
 }else{
  $endIndex = $searchIndex - 1;
  return sSort($data, $x, $startIndex, $endIndex);
 }
}
$data = array(1, 3, 4, 6, 9, 11, 12, 13, 15, 20, 21, 25, 33, 34, 35, 39, 41, 44);
$index = qSort($data, 11);      // 不用递归的排序方法
$index = sSort($data, 11, 0, count($data) - 1); // 使用递归的排序方法
echo '结果:'.$index;

运行结果:

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

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

PHP 相关文章推荐
php实现的简单压缩英文字符串的代码
Apr 24 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 PHP
php实现监听事件
Nov 06 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
php阳历转农历优化版
Aug 08 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 #PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 #PHP
PHP实现打包下载文件的方法示例
Oct 07 #PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 #PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 #PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 #PHP
php判断文件上传图片格式的实例详解
Sep 30 #PHP
You might like
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
sae使用smarty模板的方法
2013/12/17 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
php依赖注入知识点详解
2019/09/23 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
机电专业毕业生求职信
2013/10/27 职场文书
新学期开学寄语
2014/01/18 职场文书
2014年国庆节寄语
2014/09/19 职场文书
法律意见书范文
2015/06/04 职场文书
公司处罚决定书
2015/06/24 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript