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
dedecms中常见问题修改方法总结
Mar 21 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
PHP开发的一些注意点总结
Oct 12 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
解析php中的escape函数
Jun 29 PHP
深入理解PHP中的global
Aug 19 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
php数组指针操作详解
Feb 14 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
JavaScript的public、private和privileged模式
2009/12/28 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
python logging 日志的级别调整方式
2020/02/21 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
《泉水》教学反思
2014/04/11 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
理发店策划方案
2014/06/05 职场文书
工地宣传标语
2014/06/18 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2015年财政局工作总结
2015/05/21 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
Windows7下FTP搭建图文教程
2022/08/05 Servers
python计算列表元素与乘积详情
2022/08/05 Python