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 相关文章推荐
浅谈Windows下 PHP4.0与oracle 8的连接设置
Oct 09 PHP
使用PHP编写发红包程序
Jul 22 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
Symfony2创建页面实例详解
Mar 18 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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/12/05 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
jQuery select控制插件
2009/08/17 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
Python读写unicode文件的方法
2015/07/10 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Python的pygame安装教程详解
2020/02/10 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
创业计划书——互联网商机
2014/01/12 职场文书
大学新闻系自荐书
2014/05/31 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫
springboot用户数据修改的详细实现
2022/04/06 Java/Android
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android