美文网首页
用php实现二分查找

用php实现二分查找

作者: 蒿子杆 | 来源:发表于2017-06-14 23:01 被阅读0次

这两天一路超神从青铜升级到了黄金(钟无艳、鲁班全图猥琐偷人,欢迎一起开黑),本着劳逸结合的精神(zhuangbi)看了一会儿技术论坛,胡看乱看时瞄到了二分查找,反正也无聊,就决定动动脑子动动手,用php实现一下。


懂的人就不用看了,本篇纯属扯淡。。。

首先介绍一下神马叫二分查找,为什么要介绍呢?因为我相信看到这片文章的肯定有人不知道,知道也不知道啥原理,知道原理也不知道咋实现,别笑了,说的就是你!

嗯。。。 还是自己百度吧,懒得解释名词。

别打我,说一下思路才是关键:

首先,二分查找法需要数组是一个有序的数组。

一、要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。

二、如果中间位置的值等于我们的给定值,那恭喜你人品蛮好的。

二。如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值。

三。反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改变的值是开始位置的值。

思路很简单,下面贴代码:

erfen.php

先别急着吐槽我的命名,也不要急着夸我代码写的漂亮,先看下执行结果:


是不是666?好开心呀˜˜ 然后我又试了一下1,也顺利的打印了结果,内心更加澎湃了,再试试10。



开心了喝了口水回来一看,纳尼?死循环了?!赶紧杀掉



接下来就是我纠结的心路历程了,这也是为什么我决定写这篇文章的原因(脑子锈脱完后可以嘲讽一下自己)。

起初分析原因时以为是向上取整和向下取整的问题,马上把floor改成ceil,试了一下果然好了,然后试了一下查找1结果1死循环了,瞬间纠结到取整向上还是向下上。在小本本上算了半天。

后来经过反复实验和思考才发现,问题出在最核心的点上,二分查找是找到数组中间的值与值进行对比,我在实现过程中混淆了平常使用排序算法时的思路,忘记了已经对比过的值是不需要再放到等待对比的队列中去的,比如array(0,1),第一次取到的不论向上还是向下,肯定是0或者1,如果对比完我还用这个值作为start或者end,那肯定会陷入死循环中(可向上移步看最初代码)。

下面贴上修改后的代码:

妥妥的好使

一个简单的算法,因为一时疏忽出了错误,也引发出一个小小的思考,以后写的代码一定要好好测试一下,如果刚刚错误的代码跑到线上,那又是一个给系统埋下炸弹的死循环,切记切记,好好测试(本篇核心价值观)。

本篇谢幕。

相关文章

  • 用php实现二分查找

    这两天一路超神从青铜升级到了黄金(钟无艳、鲁班全图猥琐偷人,欢迎一起开黑),本着劳逸结合的精神(zhuangbi)...

  • 算法之二分查找

    二分查找 二分查找是著名、高效并有应用广泛的查找算法。 二分常规实现 1.循环实现 下面我用python语言实现循...

  • JS实现插入排序、快排、二分查找法

    用JS实现插入排序 用JS实现快排 用JS实现二分查找法

  • 简单算法

    冒泡排序: while 实现的二分查找: 递归实现二分查找:

  • PHP中实现二分法查找的两种方法

    php实现二分法的查找其实很简单,跟我一起来看看怎么实现吧。 二分法查找需要数组是一个递增的数组。 想要写出二分法...

  • PHP经典算法题

    PHP学习之路---算法题 1.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象...

  • Java数据结构和算法(有序数组和二分查找)

    一、概述 有序数组中常常用到二分查找,能提高查找的速度。今天,我们用顺序查找和二分查找实现数组的增删改查。 二、有...

  • 分治算法(swift二分法排序递归实现)

    二分查找 1、二分查找(Binary Search) 2、二分查找的基本思想 swift算法实现

  • 二分查找

    网上找到的图片便于理解 二分查找递归实现与循环实现代码: /** 二分查找 1.二分查找又称折半查找,它是一种效率...

  • 二分查找

    数据顺序存储,有序序列 O(logn) 递归实现二分查找: 非递归实现二分查找:

网友评论

      本文标题:用php实现二分查找

      本文链接:https://www.haomeiwen.com/subject/knbeqxtx.html