
實現查找指定數值在元素有序的數組中存儲的位置(索引),返回該位置(索引)。
解題步驟:
1.定義3個用來記錄索引值的變量,變量min記錄當前范圍最小索引值,初始值為0;變量max記錄當前范圍最大索引值,初始值為數組長度-1;變量mid記錄當前當前范圍最中間元素的索引值,初始值為(min+max) / 2
2.使用循環,判斷當前范圍下,最中間元素值與指定查找的數值是否相等
若相等,結束循環,返回當前范圍最中間元素的索引值mid
若不相等,根據比較結果,縮小查詢范圍為上一次查詢范圍的一般
中間元素值 比 要查詢的數值大,說明要查詢的數值在當前范圍的最小索引位置與中間索引位置之間,此時,更新查詢范圍為:
范圍最大索引值 = 上一次中間索引位置 -1;
中間元素值 比 要查詢的數值小,說明要查詢的數值在當前范圍的最大索引位置與中間索引位置之間,此時,更新查詢范圍為:
范圍最小索引值 = 上一次中間索引位置 +1;
在新的查詢范圍中,更新中間元素值的位置,再次使用最中間元素值與指定查找的數值是否相等。
中間索引值 = (范圍最小索引值 +范圍最大索引值) / 2;
3.每次查詢范圍縮小一半后,使用if語句判斷,查詢范圍是否小於0個元素,若小於0個元素,則說明指定數值沒有查詢到,返回索引值-1。
//二分查找法(折半查找法) public static int halfSearch(int[] arr,int number){ int min =0; //最小下標 int max =arr.length-1; //最大下標 int mid = 0; //中間下標 while (min<max){ //沒找到,更新范圍繼續找 mid = (min+max)/2; if (arr[mid]>number){ //number在mid的左邊 max = mid-1; //改變最大下標 }else if(arr[mid]<number){ //number在mid的右邊 min = mid+1; //改變最小下標 }else{ return mid; } } return -1; }
