PHP二分法(折半查找)

原创 2016年05月31日 14:22:08
二分法思想:
首先前提是要查找的数组对象是有序数组,这里以从小到大为例,
然后所谓折半就是,每次将目标数组一分为二,取出位于数组中间的那个值,这里记为$a[$middle]
$a[$middle]比我们要查找的数,那说明我们要查找的部分位于$a[$middle]值的右边
从而利用递归再对右侧的数组进行同样的算法,直到结束为止。
反之,$a[$middle]比我们要查找的数,那说明我们要查找的部分位于$a[$middle]值的左边,
从而利用递归再对右侧的数组进行同样的算法,直到结束为止。
若最终未找到则返回-1;

非递归方法
function Search($arr = array(), $value) {
$left = 0; $right = count($arr)-1;
while($left <= $right) {
$middle = floor(($left + $right) / 2);//数组中间下标
$flag = $arr[$middle] < $value ? -1 : ($arr[$middle] == $value ? 0 : 1);
switch($flag) {
case -1 : $left = $middle + 1; break;
case 0 : return $middle;
case 1 : $right = $middle-1; break;
}
}
return -1;
}


递归方法
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
echo bSearch($array, 5, 0, count($array)-1);
function Search($arr= array(),$val,$left,$right){
if ($left<$right)
$middle = floor(($left+$right)/2);
$f = $arr[$middle]<$val?-1:($arr[$middle]==$val?0:1);//$a[$middle]比我们要查找的数,则$f为-1,若相等则为0,否则为1
switch ($f){
case -1:return Search($arr, $val, $middle+1, $right);
break;
case 0:return $middle;
break;
case 1:return Search($arr, $val, $left, $middle-1);
   break;
}
}
return -1;
}



二分法查找(折半查找)

顺序查找并没有对表中的关键字域的顺序做出任何假设,与顺序查找不同,在折半查找中,表中的记录是按关键字域有序排列的,其比较会出现下面三种结果: searchumn< list[middle].key,...
  • xuguoli_beyondboy
  • xuguoli_beyondboy
  • 2015年10月26日 13:18
  • 1323

二分法查找(折半查找)算法学习笔记

小生学习C语言时整理的一些学习笔记及心得体会.
  • Sufeiboy
  • Sufeiboy
  • 2017年01月13日 06:07
  • 2078

【数据结构与算法】折半查找算法(二分法)

如果从文件中读取的数据记录的关键字是有序排列的,则可以用一种效率比较高的查找方法来查找文件的记录,这就是折半查找法,又称为二分法搜索。         折半查找的基本思想是:减小查找序列的长度,...
  • haoxiaodao
  • haoxiaodao
  • 2015年08月10日 17:40
  • 1100

909422229__三种查找算法:顺序查找,二分法查找(折半查找),分块查找

三种查找算法:顺序查找,二分法查找(折半查找),分块查找 一、顺序查找的基本思想: 从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关...
  • a909422229
  • a909422229
  • 2016年08月25日 19:35
  • 2723

二分法(折半)查找java实现

package Search; import java.util.Arrays; /**  * 二分查找法  * 先从小到大排序(也可从大到小排序),再查找  * ...
  • u014209004
  • u014209004
  • 2014年07月12日 17:23
  • 444

PHP实现折半(二分)查找算法

/** * Description:php实现二分查找算法的类 * @author wzy */ class binary_search{ public $arr; public $key;...
  • climb_up
  • climb_up
  • 2013年09月21日 17:21
  • 1566

c语言中二分法查找的升级版--折半查找法

最近学到一个比二分法还要精细一些的查找方法:折半查找法 进入正题,1.创建一个数组。2.每次查找前的先明确查找范围也就是下限是low,上限是high(显然low大多数人都是这么理解,反正就是定义两个...
  • u012585224
  • u012585224
  • 2014年07月26日 19:01
  • 1391

PHP有序表查找----二分查找(折半)

简介:二分查找技术,又称为折半查找。它的前提是线性表中的记录必须是关键码有序(通常从小到达有序),线性表必须采用顺序存储。基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,...
  • baidu_30000217
  • baidu_30000217
  • 2016年11月06日 22:09
  • 714

二分法 | php实现

学习数据结构与算法的教程大多都是以C++,JAVA作为实例语言。 由于最近实习常用php,顺便用php实现一下常用数据结构,也算是复习下上学期知识。 ...
  • Away_D
  • Away_D
  • 2016年08月19日 11:47
  • 520

折半查找(二分法)

递归public class SplitFind { /** * @author hbliu * @param arrayDa...
  • qq_20745827
  • qq_20745827
  • 2016年06月04日 19:50
  • 157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP二分法(折半查找)
举报原因:
原因补充:

(最多只允许输入30个字)