php 二分查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //已经排序好的数组 二分查找--递归--返回数组的索引--返回-1 就是找不到 $left 最左边索引 $right--最右边索引 function twoFinds( $array , $find , $left , $right ){ //左边大于右边-超出查找范围-找不到数据 if ( $left > $right ){ return -1; } //获取数组的中间值索引 echo $middle = ceil (( $left + $right )/2); echo "<br/>" ; //要查好的数组的中间值 $array_middle = $array [ $middle ]; //查找到数据 if ( $find == $array_middle ){ return $middle ; } else if ( $array_middle > $find ){ //中间数据大于要查找数据--左边查找 return twoFinds( $array , $find ,0, $middle -1); } else { //中间数据大于要查找数据--右边查找 return twoFinds( $array , $find , $middle +1, $right ); } } $array =[2,6,8,23,32,55,56,77,88,90]; echo count ( $array )-1; echo "<br/>" ; echo twoFinds( $array ,77,0, count ( $array )-1); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | //已经排序好的数组 二分查找--递归--返回数组的索引--返回-1 就是找不到 $left 最左边索引 $right--最右边索引 function twoFinds( $array , $find , $left , $right ){ //左边大于右边-超出查找范围-找不到数据 if ( $left > $right ){ return -1; } //获取数组的中间值索引 $middle = ceil (( $left + $right )/2); //要查好的数组的中间值 $array_middle = $array [ $middle ]; //查找到数据 if ( $find == $array_middle ){ return $middle ; } else if ( $array_middle > $find ){ //中间数据大于要查找数据--左边查找 return twoFinds( $array , $find ,0, $middle -1); } else { //中间数据大于要查找数据--右边查找 return twoFinds( $array , $find , $middle +1, $right ); } } //已经排序好的数组 二分查找--非递归--返回数组的索引--返回-1 就是找不到 $left 最左边索引 $right--最右边索引 function twoFinds1( $array , $find , $left , $right ){ //左右索引初始值 $ldefult = $left ; $rdefult = $right ; //建立循环查找,找到找不到再跳出循环 while (true){ //左边大于右边-超出查找范围-找不到数据 if ( $ldefult > $rdefult ){ return -1; break ; } //获取数组的中间值索引 $middle = ceil (( $ldefult + $rdefult )/2); //要查好的数组的中间值 $array_middle = $array [ $middle ]; //找打啦 if ( $find == $array_middle ){ return $middle ; break ; } else if ( $array_middle > $find ){ //左边查找 //处理右边的边界 $rdefult = $middle -1; } else { //右边查找 //处理左边的边界 $ldefult = $middle +1; } } } $array =[2,6,8,23,32,55,56,77,88,90]; echo count ( $array )-1; echo "<br/>" ; echo twoFinds1( $array ,88,0, count ( $array )-1); echo "<br/>" ; echo twoFinds( $array ,88,0, count ( $array )-1); |
不逼一下自己,都不知道自己有多优秀!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库