解析php二分法查找数组是否包含某一元素
二分法查找数组是否包含某一元素,兼容正反序,代码实现:
代码如下:
<?php
$searchValue = (int)$_GET['key'];
function search(array $array, $value)
{
$max = count($array)-1;
$min = 0;
$isAscSort = $array[$min] < $array[$max];
while (TRUE) {
$sum = $min+$max;
$midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);
if ($max < $min) {
return -1;
} else if ($value == $array[$midKey]) {
return 1;
} else if ($value > $array[$midKey]) {
$isAscSort ? $min = $midKey+1 : $max = $midKey-1;
} else if ($value < $array[$midKey]) {
$isAscSort ? $max = $midKey-1 : $min = $midKey+1;
}
}
}
$array = array(
'4', '5', '7', '8', '9', '10', '11', '12'
);
// 正序
echo search($array, $searchValue);
// 逆序
rsort($array);
echo search($array, $searchValue);
这个之前搜过,看过百度百科的例子(Java的实现),还有一些其他技术宅写的Code,都有问题,根本就没实现,这些人不测试就放出来误导人,大家可以去搜搜看下,昨天闲来无事就自己写一个分享给大家。
这个没考虑非顺序键的数组,主要是方法,如果需要大家可以自己扩展下。
相关推荐
-
PHP查找与搜索数组元素方法总结
本文实例讲述了PHP查找与搜索数组元素方法.分享给大家供大家参考.具体分析如下: 查找.筛选与搜索数组元素是数组操作的一些常见功能.下面来介绍一下几个相关的函数. in_array()函数 in_array()函数在一个数组汇总搜索一个特定值,如果找到这个值返回true,否则返回false.其形式如下: boolean in_array(mixed needle,array haystack[,boolean strict]); 来看下面的例子,查找变量apple是否已经在数组中,如果在,则输出
-
php 查找数组元素提高效率的方法详解
1.php in_array方法说明 PHP查找数组元素是否存在,一般会使用in_array方法. bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 参数说明: needle 待搜索的值,如果needle是字符串,比较是区分大小写的. haystack 用来比较的数组 strict 如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和
-
PHP的数组中提高元素查找与元素去重的效率的技巧解析
提高查找数组元素的效率 1.php in_array方法说明 php查找数组元素是否存在,一般会使用in_array方法. bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 参数说明: needle 待搜索的值,如果needle是字符串,比较是区分大小写的. haystack 用来比较的数组 strict 如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 n
-
解析php二分法查找数组是否包含某一元素
二分法查找数组是否包含某一元素,兼容正反序,代码实现: 复制代码 代码如下: <?php $searchValue = (int)$_GET['key']; function search(array $array, $value) { $max = count($array)-1; $min = 0; $isAscSort = $array[$min] < $array[$max]; while (TRUE) { $sum = $min+$max;
-
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
判断某字符是否包含与某于数组中,方法有很多,刚学习php的新手们估计偏向于使用循环来解决,对于一般的小网站来说,这种解决方案是不会出现什么大问题的.但就性能来说,这种方法不是最好的方法,下面笔者就 foreach,in_array() array_search 这三种方法来比较这三种方法在性能表现上的差异. <?php $runtime= new runtime; $runtime->start(); $a = 'k'; $b = array('a','b','c','d','e','f','
-
python实现判断数组是否包含指定元素的方法
本文实例讲述了python实现判断数组是否包含指定元素的方法.分享给大家供大家参考.具体如下: python判断数组是否包含指定的元素的方法,直接使用in即可,python真是简单易懂 print 3 in [1, 2, 3] # membership (1 means true inventory = ["sword", "armor", "shield", "healing potion"] if "healin
-
PHP查找一列有序数组是否包含某值的方法
问题:对于一列有序数组,如何判断给出的一个值,该值是否存在于数组. 思路:判断是否存在,最简单是,直接循环该数组,对每一个值进行比较.但是对于有序数组来说,这样写就完全没有利用好"有序"这一特点. 所有我们使用到"二分法查找", //有序数组为 $arr = array(2,5,66,87,954,1452,5865); //查找值 $str = 1452; //我们先定义 三个参数 $front = 0;//一个开始值下标 $end = count($arr) -
-
C++二分法在数组中查找关键字的方法
本文实例讲述了C++二分法在数组中查找关键字的方法.分享给大家供大家参考.具体如下: /* 此程序演示了二分法查找算法(针对按从小到大排列的数组)的实现. */ #include <iostream> using namespace std; /* 功能: 实现数组的二分法查找(只算法只适合按从小到大排列的数组) 返回值:关键字在数组中的下标, 返回-1表示未找到 a[]: 要搜索的数组 len: 数组元素个数 key: 要查找的关键字 */ int binSearch(int a[], in
-
PHP基于二分法实现数组查找功能示例【循环与递归算法】
本文实例讲述了PHP基于二分法实现数组查找功能.分享给大家供大家参考,具体如下: 二分法.分别使用while循环的方法和递归调用的方法. <?php // 二分法的使用数组必须是有序的,或升序,或降序 $arr = array( 1, 3, 5, 7, 9, 13 ); // 递归调用(相比较好理解 function bsearch_r($v, $arr, $low, $high){ if ($low > $high) {// 先判断结束条件 return -1; } $i = intval(
-
java实现二分法查找出数组重复数字
本文实例为大家分享了java实现二分法查找出数组重复数字的具体代码,供大家参考,具体内容如下 package offer; /** * 二分查找的思想来找到数组中重复的数字,时间复杂度在o(nlogn)-o(n^2) */ public class FindDuplicate3 { public static void main(String[] args) { int numbers[] = {0,1,2,3,4,4,6,7};//数组中的数 大小从0 到 numbers.length-1 f
-
关于二分法查找Java的实现及解析
目录 二分法查找 概述 递归实现 递归实现代码 循环实现代码(非递归) 二分法查找(递归.循环) 二分法查找 概述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法. 但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 归并排序即运用了二分法的思想.首先需要一个由小到大排序好的数组,先对比中间的值,如果比要找的大,则向前找,取中间值前面的一半再找中间值再对比. 如果比要找的小,则向后找,取中间值后面的一半再取中间值再对比. 递归实现 这里,
-
利用js查找数组中指定元素并返回该元素的所有索引示例
前言 这篇文章主要给大家介绍的是利用js查找数组中指定元素并返回该元素的所有索引的相关资料,文中给出了详细的示例代码,下面话不多说,来看看详细的代码示例吧. 示例代码 //在数组中查找所有出现的x,并返回一个包含匹配索引的数组 function findall(a,x){ var results=[], len=a.length, pos=0; while(pos<len){ pos=a.indexOf(x,pos); if(pos===-1){//未找到就退出循环完成搜索 break; } r
-
php中二分法查找算法实例分析
本文实例讲述了php中二分法查找算法实现方法.分享给大家供大家参考,具体如下: 二分法查找在高级点的开发可能会用到了,当然在大公司找工作时都会有面试题是这种了,下面我们来看一篇关于二分法查找在php中实现方法,具体的细节如下所示. 二分法(dichotomie) 即一分为二的方法,设[a,b]为R的闭区间,逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点
随机推荐
- PowerShell管理Win Server 2008 R2
- SqlServer修改数据库文件及日志文件存放位置
- JS得到当前时间的方法示例
- JS+CSS实现滑动切换tab菜单效果
- PHP实现bitmap位图排序与求交集的方法
- PHP实现四种基础排序算法的运行时间比较(推荐)
- Python只用40行代码编写的计算器实例
- GO语言并发编程之互斥锁、读写锁详解
- c#数据绑定之linq使用示例
- phpExcel中文帮助手册之常用功能指南
- 网页布局+纯CSS纵向下拉菜单 IE6/IE7兼容
- 批处理FINDSTR正则表达式用法实例分析
- PHP中函数内引用全局变量的方法
- jquery实现叠层3D文字特效代码分享
- jQuery实现移动端手机商城购物车功能
- jQuery之Deferred对象详解
- JS 事件绑定函数代码
- 项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
- javascript中的变量作用域以及变量提升详细介绍
- 奇怪的PHP引用效率问题分析