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 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
第五章 php数组操作
Dec 30 PHP
php牛逼的面试题分享
Jan 18 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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
基于mysql的论坛(4)
2006/10/09 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
BootStrap中
2016/12/10 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
python中文编码问题小结
2014/09/28 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
彻底理解Python list切片原理
2017/10/27 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
快速创建python 虚拟环境
2020/11/28 Python
我的五年职业生涯规划
2014/01/23 职场文书
机电一体化专业求职信
2014/07/22 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
网吧温馨提示
2015/07/17 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
XX部保密工作制度范本
2019/08/27 职场文书