PHP教程

PHP基础排序算法

本文主要是介绍PHP基础排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

PHP排序算法

1.PHP二分查找法

  当我尝试用初学的PHP写二分查找法时,我想不管什么算法首先应该有个思路,理解算法代码背后的数学逻辑,可以借助草稿纸,图像等等可以利用的方式,此处我利用的是图像,如下所示

分析该思路图,我通过不断的取原数组的子集,取的判断标准为比较我要找的值和原数组中间值的大小关系,通过控制元素下标不断像要找的值可能出现的区域逼近,首先初步考虑变量个数和类型:$start(数组开始下标),$end(数组结束下标),$mid(数组中间值坐标),$len(数组长度)

接着开始起草代码,代码如下

<?php 
function besearch($arr,$start,$len,$find)            //传进参数有数组,数组开始位置,数组长度,要找的值.这些值是为了计算重要坐标数值,用来进行比较
{
    $end = $start+$len-1;                            //求数组最后一个元素的下标,就是用开始位置加上长度+1即可,因为数组从0开始,长度从1开始,
    $mid = floor($start+$len/2);                     //求数组中间元素的下标,floor函数可以取整,不过是像下取整,2.8取2,起始位置加上长度除以2取整既中间位置下标  
    if($arr[$start]>$find or $arr[$end]<$find)       //判断边界数值,如果要找的值小于最小的,或者大于最大的,则判断没有这个值。因为是为了体现二分查找法,默认数组已经排序好了
    {
        return "查无此人";
    }
    elseif ($find==$arr[$mid])                       //二分法中间值和要找的值相等时,一旦恰巧中间值等于要找的值,或者数组不断缩减到只剩一个值而且相等时,则表示查到了。
    {
        return "ok!";
    }
    elseif($find<$arr[$mid])                        //小于中间值,递归,求长度是$mid-$start,初始值不变、如果要找的值小于中间值,则重新计算数组的开始位置,长度,和中间值,有了这几个关键值,剩下的步骤都是重复的,所以使用了递归算法,数组依然是$arr不变。起始位置因为是舍弃mid右边的,也不会变化。长度挥发上变化,通过末位置也就是mid的值减去起始位置即可得到。find要找的值不变
    {
        return besearch($arr,$start,$mid-$start,$find);
    }
    elseif ($find>$arr[$mid])                        //大于中间值,递归,求长度是$end-$mid,初始值为$mid+1原理同上
    {
        return besearch($arr,$mid+1,$end-$mid,$find);
    }
}
$a =[1,5,9,15,25,46,98];                            //定义了一个数组,采用短数组定义法,数组类型为索引数组,省略了键值,默认从0开始,和C++数组类似
echo besearch($a,2,4,10);                           //回显这个函数返回值,返回的是return的值,也就意味着原函数如果执行了return,将回到此处,也意味着原函数将停止循环。
                              //部分注释是后面手打,遇到格式问题请删除注释。
?>

 

这篇关于PHP基础排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!