如何实现Java中的二分搜索算法函数
发布时间:2023-05-30 08:57:35
二分搜索算法(Binary Search)是一种常用于在数据集合中寻找某个元素的算法。在Java中,实现二分搜索算法可以使用递归或迭代两种方式。
递归方式实现二分搜索算法
二分搜索算法的基本思想是将数据集合按照一定的规律进行分割,然后不断地缩小搜索范围。在递归方式下实现二分搜索算法,可以通过设定起点、终点和目标元素三个参数来实现。
假设需要在一个有序数组arr中寻找一个目标元素target,实现代码如下:
public static int binarySearch(int[] arr, int start, int end, int target) {
// 如果起点大于或等于终点,说明已经搜索到数组的最后一个元素
if (start >= end) {
// 如果本次搜索中未找到目标元素,则返回-1
if (arr[start] != target) {
return -1;
}
// 否则返回目标元素的位置
else {
return start;
}
}
// 计算中间位置
int mid = (start + end) / 2;
// 如果中间位置元素等于目标元素,则返回其位置
if (arr[mid] == target) {
return mid;
}
// 如果中间位置元素大于目标元素,则继续在左半边进行搜索
else if (arr[mid] > target) {
return binarySearch(arr, start, mid - 1, target);
}
// 否则在右半边进行搜索
else {
return binarySearch(arr, mid + 1, end, target);
}
}
以上代码首先判断搜索起点是否大于或等于搜索终点,如果是则表示数组已经被搜索完毕,此时需要判断最后一个元素是否为目标元素,如果不是则返回-1,否则返回该元素的位置。如果搜索起点和终点还没有重合,则计算中间位置,如果该位置元素等于目标元素则返回其位置,否则判断是否需要在左半边或右半边继续搜索。
迭代方式实现二分搜索算法
在二分搜索算法的迭代方式下实现,我们可以使用while循环来代替递归实现。其中,需要通过设置起点、终点和目标元素来进行搜索,通过每次移动起点或终点来缩小搜索范围。
迭代方式下实现代码如下:
public static int binarySearch(int[] arr, int target) {
// 设定搜索起点和终点,分别为0和数组长度-1
int start = 0, end = arr.length - 1;
// 当搜索起点小于等于搜索终点时,处理搜索过程
while (start <= end) {
// 计算中间位置
int mid = (start + end) / 2;
// 如果中间位置元素等于目标元素,则返回其位置
if (arr[mid] == target) {
return mid;
}
// 如果中间位置元素大于目标元素,则继续在左半边进行搜索
else if (arr[mid] > target) {
end = mid - 1;
}
// 否则在右半边进行搜索
else {
start = mid + 1;
}
}
// 如果在以上处理过程中未找到目标元素,则返回-1
return -1;
}
以上代码采用while循环实现,在每次判断后移动搜索起点或终点,由于每次搜索范围都会缩小,因此在搜索起点大于搜索终点时,说明该数组已经被搜索完毕,此时返回-1。
总结
通过以上的讲解可以了解到,在Java中实现二分搜索算法分别有递归和迭代两种方式。递归方式主要通过递归调用实现搜索过程,而迭代方式则采用循环迭代实现搜索过程,两种方式在思路上略有不同,但二分搜索算法的基本思想,在不同的语言中,都是一致的。
