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;
}



折半查找法/二分法

在有序(设为升序)表中,取中间元素作为比较对象,若给定值与中间元素的关键字相等,则查找成功;若给定值小于中间元素的关键字,则在中间元素的左半区继续查找;若给定值大于中间元素的关键字,则在中间元素的右半...

二分法查找/折半查找

·二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按...

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

小生学习C语言时整理的一些学习笔记及心得体会.

带---有测试代码----的二分法查找(折半查找)

#include #include /* * 带有测试代码的二分法查找 * Precondition:已经排好序 * Maintenance:如果find_this 在数组中的...
  • M_O_Bz
  • M_O_Bz
  • 2013年01月25日 22:58
  • 468

二分法查找[折半查找][Java实现]

待查找的元素:package org.pbdevj.ds.search.binarysearch; /**带排序的元素*/ public class Element implements Co...

数据结构-02 数组(有序数组) -二分法查找(折半查找)

1、主方法当然实现的方式还有递归等) /** * 二分法查找 */ public int binarySearch(long value){ int middle = 0; //中间的...

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

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

折半查找算法

  • 2014年09月26日 13:01
  • 20KB
  • 下载

冒泡排序折半查找练习

  • 2014年05月10日 19:35
  • 2KB
  • 下载

折半查找和递归折半查找详解(二分法查找,递归二分法查找)

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。(前提) 折半查找和递归折半查找详解(二分法查找,递归二分法查找)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP二分法(折半查找)
举报原因:
原因补充:

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