二分查找法
又称折半查找法,适用于不经常变动而查找频繁的有序列表。首先假设表中元素是按照升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功,否则利用中间位置记录将表分成前后两个子表,如果中间位置记录的关键字大于查找的关键字,则进一步查找前一个子表,否则进一步查找后一个子表。重复以上过程,直到找到满足条件的记录。
代码展示
public static int binarySearch2(int[] a, int key) {
//进行折半模拟,通过坐标来进行位移操作
int left = 0;
int right = a.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] > key) {
//数据在左表,因此右边的指针变为mid向前移动一个点
right = mid - 1;
} else if (a[mid] < key) {
//数据在右表,因此坐标的指针变为mid向后移动一个点
left = mid + 1;
} else {
return mid;
}
}
return -1;
}
因此二法查找法的前提是,数组是有序的,这样通过折半的话,就很快的定位到数据的位置