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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
深入PHP FTP类的详解
Jun 13 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
浅谈PHP的反射机制
Dec 15 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 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 If Else(elsefi) 语句
2013/04/07 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
永不消失的title提示代码
2007/02/15 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python 列表理解及使用方法
2017/10/27 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
《鹬蚌相争》教学反思
2014/04/22 职场文书
党员自我对照检查材料
2014/08/19 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
听证通知书
2015/04/24 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android