【JAVA】二分法查詢指定元素的下標
阿新 • • 發佈:2018-12-20
如果,我們要在一個數組中查詢某個指定的元素,可以使用二分法,從而大大降低查詢效率,前提是所給定的陣列是已經排序的;
下面是一個小小的例子
public class BinarySearch{ public static void main(String[],args){ int[] intList = {1,2,3,4,5,6,7,8,9,10}; int target = binarySearch(intList,8);//查詢元素8所在的下標; System.out.println("目標下標為:"+target); } public static int binarySearch(int[] list,int key){ int low = 0; int high = list.length - 1; while(high>=low){ int mid = (low+high)/2; if(mid<list[mid]) high = mid - 1; else if(mid==list[mid]) return mid; else low = mid + 1; } return -low; } }
如果查詢到,方法會返回該值對應的下標,如果沒找到,方法會返回該目標值應該插入的下標的負值;
但是,這裡有一個問題,如果陣列有重複值,例如int[] intList = {1,2,3,4,5,6,7,8,8,8,9,10};
方法只會返回中間那個8所在的位置