用Java代码实现二分查找算法
发布时间:2023-06-24 11:47:46
二分查找(Binary Search)又称折半查找,是一种常见的查找算法,它利用了元素有序这个特点。与传统的从头到尾依次查找不同,二分查找每次都先查找中间的元素,根据中间元素与目标元素的大小关系确定接下来需要查找的范围。通过不断缩小范围来找到目标元素,直至找到或者无法再缩小范围为止。
二分查找的实现:
首先,需要知道二分查找的时间复杂度为 O(log n),可以通过以下步骤来实现:
1. 确定查找区间的开始和结束位置,初始时为整个数组的起始和末尾位置;
2. 计算中间位置的索引,可以使用 (left + right) / 2 或 left + (right - left) / 2,其中 left 和 right 分别为查找区间的开始和结束位置;
3. 比较中间位置的值与目标值的大小关系,如果中间位置的值大于目标值,则在左半部分继续查找,更新查找区间的结束位置为 mid - 1,否则在右半部分查找,更新查找区间的开始位置为 mid + 1;
4. 循环执行第 2、3 步,直至找到目标值或者查找区间大小为 0。
具体的实现如下:
public class BinarySearch {
public static int binarySearch(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
}
在主函数中调用 binarySearch() 函数即可实现二分查找算法。例如,在一个已有序的数组中查找值为 5 的位置:
public static void main(String[] args) {
int[] nums = {1, 3, 5, 7, 9};
int target = 5;
int index = binarySearch(nums, target);
System.out.println("The index of " + target + " is " + index);
}
输出为:The index of 5 is 2
这表示在数组中找到了值为 5 的元素,其位置为索引 2。如果数组中不存在目标元素,则返回 -1。
