1. 程式人生 > >Java的二分搜尋法

Java的二分搜尋法

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);
}

}