java二分查找法 今晚上在逛碼雲的時候,看到一個php的二分查找法,看著這詞比較熟悉,(因為當時學php的時候也學過,只是工作中沒用過,又加上學的時候就稀里糊塗的,慢慢的就忘了),就點進去了,就用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 }