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 }