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版(4)
Oct 09 PHP
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
PHP pear安装配置教程
May 14 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
PHP封装的非对称加密RSA算法示例
May 28 PHP
php生成微信红包数组的方法
Sep 05 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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
咖啡的种类和口感
2021/03/03 新手入门
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
实用函数9
2007/11/08 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
10款最好的Python开发编辑器
2019/07/03 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
事业单位考核材料
2014/05/21 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
原告代理词范文
2015/05/25 职场文书
春风化雨观后感
2015/06/11 职场文书
任命书格式模板
2015/09/22 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android