欢迎访问宙启技术站
智能推送

用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。