php+求二分查找递归算法,PHP二分查找(递归和循环)
二分查找可以通过递归和循环来实现,
思路如下:
将要查找的数和中间数进行比较,
如果相等,则表示找到,返回下标
如果要查找的数小于中间这个数,则说明要查找的数分布在数组左边,修改right边界,使其等于middle-1,直接等于middle,如果查找不到,会造成死归,
如果要查找的数大于中间这个数,则说明要查找的数分布在数组的右边,修改left边界,使其等于middle+1,直接等于middle,如果查找不到,也会造成死归,
递归查找,使用一个静态变量保存下标,
没有查到,则返回-1
代码如下:
//递归二分查找
function binarySearchByRecursion($arr,$val,$left,$right){
static $index = -1;
if($left>$right){
return $index;
}
$middle = floor(($left+$right)/2);
if($val < $arr[$middle]){
//如果$middle不-1,则挑不出去,会一直递归下去
$right = $middle-1;
binarySearchByRecursion($arr,$val,$left,$right);
}elseif($val > $arr[$middle]){
$left = $middle+1;
binarySearchByRecursion($arr,$val,$left,$right);
}else{
$index = $middle;
}
return $index;
}
//循环二分查找
//
function binarySearchByLoop($arr,$val){
$index = -1;
$left = 0;
$right = count($arr)-1;
while($left <= $right ){
$middle = round(($left+$right)/2);
if($val < $arr[$middle]){
$right = $middle - 1;
}elseif($val > $arr[$middle]){
$left = $middle + 1;
}else{
$index = $middle;
break;
}
}
return $index;
}
数据结构&;算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)
什么是算法: 间而言之算法(Algorithm):一个计算过程,解决问题的方法 递归的两个特点: 调用自身 结束条件 递归示例: def func(x): : print("我的小鲤鱼&qu ...
Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...
二分查找(binary search)
二分查找又叫折半查找,要查找的前提是检索结果位于已排序的列表中. 概念 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是 ...
二分查找(binary search)java实现及时间复杂度
概述 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是拿low到high的正中间的值,我们假设是m,来跟v相比,如果m& ...
C#二分查找算法设计实现
C#二分查找算法设计实现 1.介绍 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.(记住了 ...
二分查找算法java
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...
Leecode之双指针及二分查找
题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的 ...
二分查找&;二叉排序树
首先我们先来复习一下二分查找的算法 对于正向序列的二分查找 递归实现: bool binary_search(vector &sort_arry,int begin,in ...
二分查找C++
#include using namespace std; //二分查找:每次都从中间位置寻找,如果找到了就返回,如果没找到, //则分两种情况: //(1)中间元素 ...
随机推荐
JavaScript对浏览器的URL进行编码、解码
关于url编码,js有三个函数.有三个解码方法,escape,encodeURI,encodeURIComponent().有三个解码方法,unescapse,decodeURI,decodeURIC ...
POI刷新数据后的函数(公式)更新问题
使用POI将Excel模板中的数据进行更新,这应该是很常见的操作 下面就贴上我的一小段代码 public class ModifyExcel { /** * @param fileName Excel ...
show/hide
php+求二分查找递归算法,PHP二分查找(递归和循环)相关推荐
- 对于递归算法和二分查找的理解
前言 本人涉及web开发领域的学习以来,很少去学习算法相关知识,今日对于基础的算法进行了初步探究,包括递归.二分查找等,有所感发,发表这篇博客供大家学习参考,相互交流! 1.递归算法 例题1:递归求斐 ...
- C语言中阶第四篇:分支与循环语句练习,求阶乘的多种方法(两层for循环求阶乘)、二分查找、字符串汇聚以及模拟用户登录
业精于勤荒于嬉,行成于思毁于随. 今天就来综合的联系一下前面的知识. 第十篇 一.for语句,两种方法计算阶乘 1.1.一层for循环求阶乘 1.2.实现阶乘累和 1.3.两层for循环求阶乘 二.i ...
- 查找算法之二分查找(对半查找)
当有序表采用顺序存储时,可以采用二分查找的方式查找指定关键字的元素. 二分查找的基本思想是选择表中某一位置 i i i的元素 A i A_i Ai,设该元素的关键字为 K i K_i Ki ...
- C语言之二分查找法或折半查找法剖析(经典例题,经典解析)
二分查找法(也叫折半查找法): 什么是二分查找? 具体查找的方式? 两种方法剖析 易错点列举 先举例题: int arr[]={1,2,3,4,5,6,7,8,9,10}; 找出7所在的位置. 分析之 ...
- 二分查找算法(折半查找算法)
二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...
- 查找算法:二分查找、顺序查找
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...
- Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...
- 二分查找法(递归与循环实现)
问题: 给定一个排序数组和一个数k,要求找到第一个k的位置和最后一个k的位置 解析: 由于给定的数组是从小到大排序的,故可以按照二分查找法来找,下面分别从递归和循环两种方法来阐述: //递归方法 in ...
- 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...
最新文章
- Android JNI 第三篇 Java参数类型与本地参数类型对照
- php ios视频文件上传,iOS实现视频和图片的上传思路
- mysql 中的脏读与幻读_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...
- [Everyday Mathematics]20150103
- STL:Numberic_limit()
- Matlab绘图--包含各种标示符的输入方法
- VMware 多款产品中存在严重漏洞
- Cassandra 之旅 (二) Getting Started
- java-第三章-从键盘输入3个整数,然后将输入的整数按照从小到大的顺序放在abc,并输出3个变量的值...
- 【转】Java中的关键字 transient
- C++ ../ ./的区别
- 1 统计学习方法基础
- Textbox的用法
- 论文润色软件Stylewriter,whitesmoke,1check使用亲测
- 「硬见小百科」很全的二极管干货
- POI 报错问题:Merged region A15 must contain 2 or more cells
- OA系统-员工的添加和查询-登录功能的实现
- Canonical标签怎么使用,Canonical标签有什么作用?
- 笔记本没有Insert键怎么办
- 狂热之下被遗忘的指标—快充倍率