1. 程式人生 > >java 折半找索引程式碼(實用+程式碼詳解)

java 折半找索引程式碼(實用+程式碼詳解)

*
   陣列的查詢功能
     在一個數組中,找一個元素,是否存在於陣列中,如果存在,就返回索引
	 
	 普通查詢:
	   找到元素在陣列中出現的索引,如果沒有這個 元素,結果就是負數
		
*/
public class ArrayMethodTest_3{
	 public static void main(String[] args){
		 int[] arr = {1,3,5,7,9,11,15};
		 int index = binarySearch(arr,10);
		 System.out.println(index);
		 
	 }
	 
	 /*
	     定義方法,實現,折半查詢
		 返回值: 索引
		 引數: 陣列,被找的元素 
		 實現步驟:
		   1. 需要的變數定義
		      三個,三個指標
			  
		   2. 進行迴圈折半
		      可以折半的條件  min <= max
		   
		   3. 讓被找元素,和中間索引元素進行比較
		       元素 > 中間索引  小指標= 中間+1
			   元素 < 中間索引  大指標= 中間-1
			   元素 == 中間索引  找到了,結束了,返回中間索引
			   
		    4. 迴圈結束,無法折半
			  元素沒有找到 ,返回-1
	 */
	 public static int binarySearch(int[] arr, int key){
		 //定義三個指標變數
		 int min = 0 ;
		 int max = arr.length -1 ;
		 int mid = 0;
		 //迴圈折半,條件 min<=max
		 while( min <= max){
			 //公式,計算中間索引
			 mid = (min+max)/2;
			 //讓被找元素,和中間索引元素進行比較
			 if(key > arr[mid]){
				 min = mid + 1;
			 }else if (key < arr[mid]){
				 max = mid - 1;
			 }else{
				 //找到元素,返回元素索引
				 return mid;
			 }
		 }
		 return -1;
	 }
	 
	/*
	   定義方法,實現陣列的普通查詢
	   返回值: 索引
	   引數:   陣列, 被找的元素
	   
	   實現步驟:
	     1. 遍歷陣列
		 2. 遍歷過程中,使用元素和陣列中的元素進行比較
		    如果相同,返回元素在陣列中的索引
			如果不同,返回負數
	*/
	public static int search(int[] arr, int key){
		//遍歷陣列
		for(int i = 0 ; i < arr.length ; i++){
			//陣列元素,被查詢的元素比較
			if(arr[i] == key){
				//返回索引
				return i;
			}
		}
		return -1;
	}
}