java学习笔记之二分查找法

java二分查找法

  今晚上在逛码云的时候,看到一个php的二分查找法,看着这词比较熟悉,(因为当时学php的时候也学过,只是工作中没用过,又加上学的时候就稀里糊涂的,慢慢的就忘了),就点进去了,就用java写了一遍,使用的递归。

  二分查找法的个人理解:

    首先你得是个从小到大顺序的数组,进行数组索引取中间,将中间索引的元素与要查找的元素进行比大小,如果要查找元素的值大于中间元素,然后下一轮就取中间索引到最后索引处这个范围进行取中间索引,比大小的工作。如果要查找元素的值小于中间元素,然后下一轮就取数组起始索引到中间索引这个范围进行取中间,比大小的工作,就这样一直找下去。

php源代码:

 1 <?php
 2 
 3 // 二分查找法
 4   function search(&$arr,$final,$leftIndex,$rightIndex){
 5      if($leftIndex>$rightIndex){
 6         echo "找不到了";
 7         return;
 8      }
 9 
10      $middleIndex=round(($leftIndex+$rightIndex)/2);
11 
12      //如果大于,像后面找
13      if($final>$arr[$middleIndex]){
14         search($arr,$final,$middleIndex+1,$rightIndex);
15      //如果小于,应该向前面找
16      }else if($final<$arr[$middleIndex]){
17        search($arr,$final,$leftIndex,$middleIndex-1);
18      }else{
19         echo "找到了下标是$middleIndex";
20      }
21   }
22  $arr=array(10,88,99,888,7777);
23   search($arr,99,0,count($arr)-1);
24 ?>

  java代码实现:

 1 public class Demo02 {
 2     public static void main(String[] args) {
 3         int[]  arr={34,32,44,23,43,24};
 4         Arrays.sort(arr);
 5         System.out.println(Arrays.toString(arr));
 6         search(arr, 32, 0, arr.length-1);
 7     }
 8     
 9     public static void search(int[] arr,int searchNum,int leftIndex,int rightIndex){
10         if(leftIndex>rightIndex){
11             System.out.println("找不到了");
12             return;
13         }
14         int middleIndex=Math.round((leftIndex+rightIndex)/2);
15         if(searchNum>arr[middleIndex]){
16             search(arr, searchNum, middleIndex+1, rightIndex);
17         }else if(searchNum<arr[middleIndex]){
18             search(arr, searchNum, leftIndex, middleIndex-1);
19         }else {
20             System.out.println("找到目标:"+middleIndex);
21         }    
22     }
23     
24     
25 }
原文地址:https://www.cnblogs.com/xuzhaocai/p/8099954.html