• php实现二分查找


    php实现二分查找

    一、总结

    1、谋而后动

    2、算法想边界(临界)情况

    二、代码

    在一个数组查找你所需元素(二分查找算法)。

    思路:以数组中某个值为界,再递归进行查找,直到结束。

    代码一

     1 <?php
     2 function find($array, $low, $high, $k){
     3   if ($low <= $high){
     4   $mid = intval(($low+$high)/2);
     5     if ($array[$mid] == $k){
     6     return $mid;
     7   }elseif ($k < $array[$mid]){
     8     return find($array, $low, $mid-1, $k);
     9     }else{
    10     return find($array, $mid+1, $high, $k);
    11     }
    12   }
    13   die('Not have...');
    14 }
    15 //test
    16 $array = array(2,4,3,5);
    17 $n = count($array);
    18 $r = find($array,0,$n,5)

    1、想最后的临界情况:第13行,return false果然是写在这里,我没有想错

    2、die的用法:第13行,die终结程序

    代码二:thinkphp控制器

     1 <?php
     2 namespace appindexcontroller;
     3 
     4 use appindexcontrollerBase;
     5 
     6 class Exercise extends Base
     7 {
     8     public function index()
     9     {
    10         // return view('insert_array');
    11         $this->binary_search1Demo();
    12     }
    13 
    14     //二分查找
    15     public function binary_search1($arr,$l,$r,$search_){
    16         sort($arr);
    17         //2、递归返回条件
    18         //3、递归实现二分查找
    19         if($l<=$r){
    20             $mid=intval(($l+$r)/2);
    21             if ($arr[$mid]==$search_) {
    22                 return true;
    23             }else if($arr[$mid]>$search_){
    24                 return $this->binary_search1($arr,$l,$mid-1,$search_);
    25             }else{
    26                 return $this->binary_search1($arr,$mid+1,$r,$search_);
    27             }
    28         }
    29     }
    30 
    31     public function binary_search1Demo(){
    32         $arr=array(2,5,8,13,53,78,234,435);
    33         $len=count($arr);
    34         $l=0;
    35         $r=$l+$len-1;
    36         $search_=53;
    37         if($this->binary_search1($arr,$l,$r,$search_)){
    38             echo "find";
    39         }else{
    40             echo "not find";
    41         }
    42     }
    43 
    44 }

    1、算法谋而后动:第15行,谋而后动,想清楚,心中把算法演算清楚再行动

    2、sort的返回值:第16行,sort的返回值是true和false,而不是排序好的数组

    3、返回值:第22行,return false不知道写在哪里,事实上,不用写

  • 相关阅读:
    #Leetcode# 876. Middle of the Linked List
    #Leetcode# 237. Delete Node in a Linked List
    #Leetcode# 234. Palindrome Linked List
    #Leetcode# 149. Max Points on a Line
    #Leetcode# 152. Maximum Product Subarray
    #Leetcode# 228. Summary Ranges
    #Leetcode# 227. Basic Calculator II
    PAT 1089 狼人杀-简单版
    linux——web安全之sql注入【预习阶段】
    linux——攻防技术介绍|主动攻击|被动攻击
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8986172.html
Copyright © 2020-2023  润新知