本文实例讲述了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面向对象程序设计入门教程》、《php字符串(string)用法总结》及《php程序设计算法总结》
希望本文所述对大家php程序设计有所帮助。
评论列表:
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论