php 实现简单的二分查找

<?php
 #二分查找
 function binarySearch($arr, $target) {
     $low = 0;
     $high = count($arr) - 1;

     while($low <= $high) {
         $mid = floor(($low + $high) / 2);
         #找到元素
        if($arr[$mid] == $target) return $mid;
        #中元素比目标大,查找左部
        if($arr[$mid] > $target) $high = $mid - 1;
        #重元素比目标小,查找右部
        if($arr[$mid] < $target) $low = $mid + 1;
    }

    #查找失败
    return false;
}
$data = array(1,2,6,3,4,5,7,8,9)
//一定要是一个有序的数组  正序倒序均可!!
sort($data);
var_dump(binarySearch($data,5))
时间: 2024-10-19 02:27:17

php 实现简单的二分查找的相关文章

简单的二分查找法

#include <iostream> #include <cstdio> #include <cstring> using namespace std; int binary_search(int len, int num[], int request) { int left = 0, right = len - 1, mid; while (left < right) { mid = (left+right)/2; // step 1: 首先请填写这里的mid

python算法之二分查找

说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看个人爱好.实习的时候有个同事对于python的缩进来控制代码块各种喷....他认为还是用大括号合适...怎么说呢,适合自己的才是最好的.我个人的毛病就是,写了几天C,到要转到python的时候,代码中依旧有C的影子..比方大括号问题,比方忘记在while或这for.if.else等后面加":&quo

LeetCode Search Insert Position (二分查找)

题意: 给一个升序的数组,如果target在里面存在了,返回其下标,若不存在,返回其插入后的下标. 思路: 来一个简单的二分查找就行了,注意边界. 1 class Solution { 2 public: 3 int searchInsert(vector<int>& nums,int target) 4 { 5 int L=0, R=nums.size(); 6 while(L<R) 7 { 8 int mid=R-(R-L+1)/2; 9 if(nums[mid]>=t

二分查找、二分查找大于等于key的第一个元素、二分查找小于等于key的最后一个元素

二分查找很简单,二分查找的变形需要注意一些细节. 1.当找大于等于key的第一个元素,或者查找小于等于key的最后一个元素时, 循环条件是 low < high,这和基本的二分查找不同, 但需要在循环退出的时候,判断是否满足条件: 2.如果是找最后一个满足条件的情况, 下限移动时不能用 low=mid+1:而应该用 low=mid: 此时,mid计算时应该用 mid=(low+high+1)/2, 保证 最后low.high相差1时不会陷入死循环, 循环退出后,下限可能是结果: 3.如果是找第一

递归函数和二分查找

递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身, 这个函数就是递归函数. 举个例子,我们来计算阶乘 n! = 1 x 2 x 3 x ... x n,用函数 fact(n) 表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n*fact(n-1),只有 n = 1 时需要特殊处理. 于是,fact(n) 用递归的方式写出来就是: d

数组(二分查找)

数组 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给一个数组a[n],令s[i]为数组a中比a[i]大的数的个数.求数组s. Input: 输入包含多组测试数据,对于每组数据,输入一个整数n(1<=n<=10^5),接下来有n个整数a[i](0<=a[i]<=10^9);保证输入的a[i]全部不同. Output: 对于每组数据,输出数组s. Sample Input: 5 3 4 5 1 2 10 11 4

二分查找(Binary Search)的几种变种形式

二分查找的几种变种形式 二分查找是大家经常用而且也比较简单的一种算法,查找的时间复杂度为O(logn).wiki上的定义为: 是一種在有序陣列中尋找某一特定元素的搜尋演算法 搜尋過程從陣列的中間元素開始,如果中間元素正好是要尋找的元素,則搜尋過程結束:如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中尋找,而且跟開始一樣從中間元素開始比較.如果在某一步驟陣列為空,則代表找不到.這種搜尋演算法每一次比較都使搜尋範圍縮小一半. 简单的二分查找算法相信大家都会写,但是有时候经常

递归与二分查找

# 斐波那契数列1 1 2 3 5 8 13 def func(n): print(n) if n==1 or n ==2: return 1 else: return func(n-1) + func(n - 2) print(func(6)) # result:8 # 函数在执行递归的过程中,如果获取不到结果会将当前状态进行存储,继续向下递归直到返回结果,python中的递归深度为997-998. # 递归解析 # 第一次递归进入执行执行func(6 - 1),没有结果继续向下执行func(

查找算法系列之简单查找:顺序查找、二分查找、分块查找

近期总结了各大排序算法的原理 ,并对其进行了实现,想着一并把查找算法总结了,今天就着手开始总结查找算法. 废话不多说,这篇文章从最简单的查找算法开始讲起,之后会补充复杂的二叉搜索树查找(BST)和B树,B+树查找以及哈希查找等. 顾名思义,查找就是寻找到关键字在队列中的位置,最笨的查找算法就是依次顺序比较,复杂度为O(n),但是有很多方法的复杂度可以达到O(logn)等等. 1.顺序查找 关键字与数组中的数顺序比较,时间复杂度O(n). template<class T> int OrderS