`

二分法查找数组是否包含某一元素

阅读更多
原帖地址:http://www.cnblogs.com/toby/archive/2013/05/23/3094342.html

二分法查找数组是否包含某一元素,兼容正反序,代码实现:



 1 <?php
2
3 $searchValue = (int)$_GET['key'];
4
5 function search(array $array, $value)
6 {
7 $max = count($array)-1;
8 $min = 0;
9 $isAscSort = $array[$min] < $array[$max];
10
11 while (TRUE) {
12 $sum = $min+$max;
13 $midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);
14
15 if ($max < $min) {
16 return -1;
17 } else if ($value == $array[$midKey]) {
18 return 1;
19 } else if ($value > $array[$midKey]) {
20 $isAscSort ? $min = $midKey+1 : $max = $midKey-1;
21 } else if ($value < $array[$midKey]) {
22 $isAscSort ? $max = $midKey-1 : $min = $midKey+1;
23 }
24 }
25 }
26
27 $array = array(
28 '4', '5', '7', '8', '9', '10', '11', '12'
29 );
30 // 正序
31 echo search($array, $searchValue);
32
33 // 逆序
34 rsort($array);
35 echo search($array, $searchValue);


这个之前搜过,看过百度百科的例子(Java的实现),还有一些其他技术宅写的Code,都有问题,根本就没实现,这些人不测试就放出来误导人,大家可以去搜搜看下,昨天闲来无事就自己写一个分享给大家。


这个没考虑非顺序键的数组,主要是方法,如果需要大家可以自己扩展下。

本文链接

分享到:
评论

相关推荐

    解析php二分法查找数组是否包含某一元素

    二分法查找数组是否包含某一元素,兼容正反序,代码实现:复制代码 代码如下:&lt;?php $searchValue = (int)$_GET[‘key’]; function search(array $array, $value) { $max = count($array)-1; $min = 0; $...

    21天学会Java之(Java SE第八篇):数组、冒泡排序法、二分法查找

    其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点: 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 其元素必须是相同类型,不允许出现混合类型。 数组...

    二分法查找递归与非递归

    使用二分法搜索的技术去搜索一个数组中元素,其中包括递归方法和非递归方法。欢迎大家评阅后给我一点好的建议,谢谢哦。

    C#,入门教程与实操,非常具有参考价值的数组算法完整工程源代码,包括:加强版(实数)数组;加强版(整数)数组;加强版(泛型)数组

    搜索数组中是否有“对和值”等于 x;返回下标乘积最大数;二分法搜索 low ... high 之间的最小数;计算数组的最大哈明距离;移动所有的 0 到数组末尾;Fisher-Yates洗牌算法,听起来很高大上 :P;计算第 k 个最小数...

    计算机二级公共基础知识

    顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次,可将查找范围减少为原来的一半,效率大大提高。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次, 二级公共...

    [详细完整版]数据结构描述.doc

    但是,对于一种特殊的数组——有序数组而言,采用我们后面即将提 到的二分法查找,效率将非常的高。 二、效率的比较: 由上面的描述可以看出,对于一般数组的插入操作,消耗时间用大O表示法为:O(1) ,即消耗常数...

    c/c++ 学习总结 初学者必备

    参数里涉及指针,就要考虑该指针是不是一个需要修改的量,如果是,则参数应采用指向指针的指针。 (C语言里参数传递都是传值,是一个拷贝,修改指针,只是改变了拷贝的指向,原指针指向并没有改变,而修改指针的内容...

    c程序设计习题参考(谭浩强三版)习题参考解答

    输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,输出“不在表中”。 39 7.10有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格...

    leetcode题库-g_algorithm:前端算法合集

    二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤: (1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,...

    数据结构题

    1. 对一个算法的评价,不包括如下( )方面的内容。 A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度 2. 在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。 A. p-&gt;next=HL-&gt;next; ...

    java常用工具类的使用

    比如对一个数组进行排序,程序员可以写如下排序算法: 代码演示:数组排序 public static void sort(int[] arrs) { boolean isSwap = false; for (int i = 0; i ; i++) { isSwap = false; for (int j = arrs....

    C程序范例宝典(基础代码详解)

    本书全面介绍了应用C语言进行开发的各种技术和技巧,全书共分12章,内容包括基础知识、指针、数据结构、算法、数学应用、文件操作、库函数应用、图形图像、系统调用、加解密与安全性、游戏、综合应用等。全书共提供...

    php网络开发完全手册

    8.5.2 二分法查找 128 8.5.3 使用array_search函数进行查找 129 8.5.4 线性表的入栈与出栈 129 8.5.5 数组的合并 131 8.5.6 数组的拆分 133 8.5.7 随机排序 134 8.6 小结 135 第9章 PHP程序调试 136 9.1 PHP中的错误...

Global site tag (gtag.js) - Google Analytics