二分法查找
算法:當(dāng)數(shù)據(jù)量很大適宜采用該方法。采用二分法查找時(shí),數(shù)據(jù)需是有序不重復(fù)的。
基本思想:假設(shè)數(shù)據(jù)是按升序排序的,對于給定值x,從序列的中間位置開始比較,如果當(dāng)前位置值等于x,則查找成功;若x小于當(dāng)前位置值,則在數(shù)列的前半段中查找;若x大于當(dāng)前值則在數(shù)列的后半段中繼續(xù)查找,直到找到為止。
代碼示例
class Demo{
public static void main(String[] args){
int[] arr = new int[]{1,2,3,4,5,7,11,45,78};
int keyNum = 11;//目標(biāo)數(shù)字
int targetNumIndex = binarySearch(arr,keyNum);
System.out.println(targetNumIdex);
}
public static int binarySearch(int[] arr,int keyNum){
int start = 0;//開始游標(biāo)
int end = arr.length - 1;//結(jié)束游標(biāo)
while(start<=end){
int middleIndex = (start + end)/2;
if(keyNum>arr[middleIndex]){
start = middleIndex+1;
}else if(keyNum<arr[middleIndex]){
end = middleIndex-1;
}else if(keyNum<arr[middleIndex]){
return middleIndex;
}
}
return -1
}
}
```