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 相关文章推荐
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
php读取30天之内的根据算法排序的代码
Apr 06 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP isset()与empty()的使用区别详解
Feb 10 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 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无敌近乎加密方式!
2010/07/17 PHP
ucenter通信原理分析
2015/01/09 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
javascript读取xml
2006/11/04 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
Vuex简单入门
2017/04/19 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
Python 装饰器深入理解
2017/03/16 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
快速入门python学习笔记
2017/12/06 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
python实现五子棋小游戏
2020/03/25 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
酒店采购员岗位职责
2014/03/14 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
公司经营目标责任书
2015/01/29 职场文书
新入职员工工作总结
2015/10/15 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
党章学习心得体会2016
2016/01/14 职场文书
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js