二分查找算法介绍
二分查找算法
二分查找又叫作折半查找,二分查找算法要求要查找的序列是有序的,每次查找都取中间位置的值与待查关键字进行比较,如果中间位置的值比待查关键字大,则在序列的左半部分继续执行该查找过程,如果中间位置的值比待查关键字小,则在序列的右半部分继续执行该查找过程,直到查找到关键字为止,否则在序列中没有待查关键字。
show code
二分查找算法Java实现
/**
* 二分查找
* @param array 源数组
* @param a 目标值
* @return 目标值在数组中索引位置,未找到返回-1
*/
public static int binarySearch(int[] array, int a) {
// 最小数据索引
int low = 0;
//最大数据索引
int high = array.length - 1;
//中间数据索引
int mid;
//通过while循环在数组中查找传入的数据,在该数据大于中间位置的数据时向右查找,即最大索引位置不变,将最小索引设置为上次循环的中间索引+1;在该数据小于中间位置的数据时向左查找,即最小索引位置不变,然后将最大索引设置为上次循环的中间索引并-1。重复以上过程,直到中间索引位置的数据等于要查找的数据,则将该数据对应的索引返回。
while (low <= high) {
//中间位置
mid = (low + high) / 2;
if (array[mid] == a) {
return mid;
} else if (a > array[mid]) {
//从右查找
low = mid + 1;
} else {
//向左查找
high = mid - 1;
}
}
return -1;
}
测试
public static void main(String[] args) {
int[] array = new int[100];
for (int i = 111; i < 211; i++) {
array[i-111] = i;
}
System.out.println(binarySearch(array,188));
}
注意
二分查找算法要求要查找的集合是有序的,如果不是有序集合,要先通过排序算法排序后再进行查找。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!