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实现登陆验证码(类似条行码状)
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
用PHP实现图象锐化代码
Jun 14 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
PHP 图片水印类代码
Aug 27 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP实现微信提现功能
Sep 30 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
php的memcached客户端memcached
2011/06/14 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP文件操作实例总结
2016/09/27 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
Date对象格式化函数代码
2010/07/17 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python base64编码解码实例
2015/06/21 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
python写一个md5解密器示例
2018/02/23 Python
python 读取DICOM头文件的实例
2018/05/07 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
python中rb含义理解
2020/06/18 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
销售顾问工作计划书
2014/08/15 职场文书
超市开店计划书
2014/09/15 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
优秀教师事迹材料
2014/12/15 职场文书
开除通知书范本
2015/04/25 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
婚庆司仪开场白
2015/05/29 职场文书
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers