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
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
input file获得文件根目录简单实现
Apr 26 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
简单解析PHP程序的运行流程
Jun 23 PHP
php中final关键字用法分析
Dec 07 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
tp5修改(实现即点即改)
Oct 18 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自定义函数返回多个值
2006/11/26 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
php异常处理使用示例
2014/02/25 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
密码强度检测效果实现原理与代码
2013/01/04 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
详解Vite的新体验
2021/02/22 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
玩转python爬虫之正则表达式
2016/02/17 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
产品销售计划书
2014/05/04 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
运动会通讯稿300字
2015/07/20 职场文书
小学毕业教师寄语
2019/06/21 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers