Java函数实现二分查找的方法?
发布时间:2023-06-18 22:26:11
二分查找又称折半查找,是一种在有序数组中查找某一特定元素的查找算法。该算法每次都从数组的中间元素开始查找,如果中间元素正好是要查找的元素,则查找过程结束。如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半继续查找,而且不考虑另外一半。 **其基本思路是将n个元素分成大致相等的两部分,取其中一部分进行查找,如果查找的元素比取出的中间元素大,则在右半部分继续查找,否则在左半部分查找,直到查找成功,或数组所有元素被查找完毕而未找到。**
二分查找的时间复杂度为O(log n),比线性查找的O(n)快得多,但是它的前提是需要有序数组。
下面是Java实现二分查找的方法:
public static int binarySearch(int[] arr, int key) {
int low = 0; //最小下标
int high = arr.length - 1; //最大下标
int mid; //中间下标
while (low <= high) {
mid = (low + high) / 2; //计算中间下标
if (key == arr[mid]) { // 查找到了
return mid;
} else if (key > arr[mid]) { // 在右半边继续查找
low = mid + 1;
} else { //在左半边继续查找
high = mid - 1;
}
}
return -1; //查找失败
}
这段代码中,我们使用了while循环,重复执行二分查找直到查找到目标值,或者尝试了所有可能的值后没有找到目标值,返回-1表示查找失败。
首先,我们定义了最小下标(low)和最大下标(high)。mid变量计算中间下标位置。
接下来,使用while循环进行二分查找。如果目标数值比中间值大,则在右半边查找。如果目标数值比中间值小,则在左半边查找。
如果找到了目标数值,直接返回对应的下标。如果循环完毕,还没有找到目标数值,则返回-1,表示查找失败。
在使用二分查找算法时,一定要注意保证数据源是有序的(即升序或者降序),否则查找结果将可能出现错误。
