这篇文章给大家介绍使用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怎么实现一个折半查询算法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。