二分查找:
将升序数组以中间值为界分为两半,让待查找值和中间值进行比较,比中间值小,去小于中间值的部分找,比中间值大,去大于中间值的部分找
二分查找基础版:
/*二分查找基础版
//Params: a - 待查找的升序数组
target - 待查找的目标值
//return:
找到则返回索引
找不到返回-1
*/
public static int binarySearchBasic1(int[] a, int taeget) {
int i = 0,
int j = a.length-1; //设置指针和初值
while (i <= j) { //范围内有东西
int m = (i + j) >>> 1;
if (taeget < a[m]) { //目标在左边
j = m - 1;
}else if (a[m] < taeget) { //目标值在右边
i = m + 1;
} else { //目标值等于中间值
return m;
}
}
return -1;
}
二分查找改动版:
public static int binarySearchBasic2(int[] a, int taeget) {
int i = 0,
int j = a.length; //改动第一处
while (i<j) { //改动第二处
int m = (i+j) >>>1;
if (taeget<a[m]) {
j = m; //改动第三处
}else if (a[m]<taeget) {
i = m + 1;
} else {
return m;
}
}
return -1;
}