正在查看: 2010年04月日志归档(第 1 页 / 共 2 篇)

Hello, Stblog

时间过的真快,来墨尔本已经一年多了,而距离我写的上一篇日志也有半年多了。这段时间感悟很多,有一堆东西想写下来,不过还是手懒了。

目前你所看到的这段文字,来自我和CI中国其他几位成员目前正在开发的基于Codeigniter (PHP MVC框架)开发的一套博客程序——Stblog,目前的最新版为 v0.1.2。写这套程序的原因,我写在了这里,就不转载过来了。

正在学习PHP和Codeigniter的朋友,我推荐你们下载和试用这套程序,但目前暂不推荐使用在真实的环境当中,因为它有诸多地方需要完善。待程序和相关文档成熟之后,在使用也不迟。

Stblog开发相关动态:

项目主页:http://code.google.com/p/stblog/

程序下载:http://code.google.com/p/stblog/downloads/list

Bug提交:http://code.google.com/p/stblog/issues/list

安装方法/插件/主题开发教程:http://code.google.com/p/stblog/w/list

注意:STBlog的协作开发和版本控制工具为Git (没有使用SVN),目前被托管在Github.com。请移步 http://github.com/stblog/Stblog  了解最新开发动态,以及checkout最新开发版本。

在PHP中数组进行二分法查找

二分法查找(Binary Search)是一种搜索算法(平均的时间复杂度为O(log n)),支持对一个有序列表中的某个元素进行快速查找。更多二分法查找的解释和例子可以参考维基百科的说明

这里我只写出其在PHP中的算法实现,仅作记录。如果你有更好的实现方法,请在下方留言与我交流。

//script by Saturn from cnsaturn.com

function binarySearch($searchArray, $targetValue)
{
    //初始范围为全部数组
    $startIndex = 0;
    $endIndex = count($searchArray) - 1;
    //初始中间位置的元素索引
    $middle = round(($endIndex - $startIndex) / 2);
 
    //如果要搜索的元素在初始开始位置,则直接返回
    if($targetValue == $searchArray[$startIndex])
    {
       return $startIndex;
     }
 
    //如果要搜索的元素在初始结束位置,则直接返回
    if($targetValue == $searchArray[$endIndex])
    {
       return $endIndex;
    }
 
    //循环查找
    while($searchArray[$middle] !== $targetValue && $startIndex < $endIndex)
    {
       //调整搜索起止范围
       if($searchArray[$middle] > $targetValue)
       {
          $endIndex = $middle;
       }
       else if($searchArray[$middle] < $targetValue)
       {
          $startIndex = $middle;
       }
  
      //调整中间位置元素的索引,注意获得索引值的方法
      $middle = round(($endIndex - $startIndex) /2) + $startIndex;   
   }
 
   //返回目标值的索引,如果未找到则返回-1
   return ($searchArray[$middle] == $targetValue) ? $middle : -1;
}

创建一个数组和一个目标值来测试上述查找算法:

$array = array(1,2,3,4,5,6,7,8);

//echo 4;
echo binarySearch($array, 5);