PHP实现折半查询算法
2016-04-01 18:20
671 查看
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
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文件上传处理
- windows server 2003 php 环境搭建 MYSQL错误1067
- PHP安全过滤函数
- ThinkPHP3.2URL重写隐藏应用的入口文件index.php
- PHP备忘录
- thinkphp去掉index.php
- thinkPHP连接数据库
- 使用jrtplib打包发送h264数据,关使用vlc|mplayer播放
- matplotlib中使用imshow绘制二维图
- PHPCMS 系统类库与函数库调用
- FileInputStream与FileOutputStream类
- 使用Matplotlib制作动图
- Thinkphp无限分类函数
- ThinkPHP的无限分类
- 【PHP内核】语法:IF判断的实现
- phpcms的admin.class.php
- H.264 RTP PAYLOAD 格式
- PHP递归实现层级树状展开
- 编译安装 php 5.4.11