Java的二分搜尋法
阿新 • • 發佈:2018-12-09
import java.util.Arrays;
public class Demo2 {
/* * 二分搜尋法(折半查詢) 前提是這個陣列必須是有序的 * Arrays.binarySearch() * * 注意:二份搜尋法:根據元素查詢下標 * 找到返回當前元素的下標,沒有找到返回負數 */ public static void myBinarySearch(int[] arr,int ele){ //確保陣列有序 Arrays.sort(arr); //int[] arr = {-10,1,10,20,45,56,88}; //定義開始和結尾的2個下標 int start = 0; int end = arr.length; int index =-1; //保證開頭下標不能超過結尾下標,否則陣列就會越界 int count = 0; while(start<=end){ count++; int mid = (start+end)>>>1; //折半點 //如果目標元素和中間元素相等 if(arr[mid]==ele){ //把中間元素的下標賦值給index,代表找到這個元素的下標 index = mid; //後面就不用比較了 break; //如果目標元素比中間元素的值大 }else if(ele>arr[mid]){ //去陣列的右邊來找 並且,start變成mid+1的值,end值不變 start = mid+1; //如果目標元素比中間元素的值小 }else{ //去陣列的右邊來找 並且,end變成mid-1的值,start值不變 end = mid-1; } } System.out.println(count); if(index!=-1){ System.out.println("元素:"+ele+"的下標是:"+index); }else{ System.out.println("不存在此元素"); } } public static void main(String[] args) { int[] arr = {10,20,45,-10,56,1,88}; //亂序陣列 myBinarySearch(arr,56); Arrays.sort(arr); //排好序的陣列 //{-10,1,10,20,45,56,88,100} int index = Arrays.binarySearch(arr, 500); System.out.println(index); }
}