二分查找算法详解:Java代码实现及实例演示

二分查找(Binary Search),也称为二分搜索,是一种高效的搜索算法,用于在有序数组或列表中查找目标元素的位置。

二分查找的工作原理

二分查找算法的核心思想是:将目标值与数组的中间元素进行比较。

  1. 如果目标值等于中间元素,则目标元素已找到,返回其索引。
  2. 如果目标值小于中间元素,则目标元素位于数组的左半部分,继续在左半部分进行二分查找。
  3. 如果目标值大于中间元素,则目标元素位于数组的右半部分,继续在右半部分进行二分查找。

重复以上步骤,直到找到目标元素或搜索范围为空为止。

Java代码实现

public class BinarySearch {
    public static int binarySearch(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        
        while (left <= right) {
            int mid = left + (right - left) / 2;
            
            if (nums[mid] == target) {
                return mid; // 目标元素找到,返回索引
            } else if (nums[mid] < target) {
                left = mid + 1; // 目标元素在右半部分,缩小搜索范围为右侧
            } else {
                right = mid - 1; // 目标元素在左半部分,缩小搜索范围为左侧
            }
        }
        
        return -1; // 目标元素未找到,返回-1
    }
    
    public static void main(String[] args) {
        int[] nums = {1, 3, 5, 7, 9};
        int target = 5;
        int result = binarySearch(nums, target);
        
        if (result != -1) {
            System.out.println('目标元素 ' + target + ' 在数组中的索引为 ' + result);
        } else {
            System.out.println('目标元素 ' + target + ' 未找到');
        }
    }
}

在上述代码中:

  • binarySearch方法接受一个有序数组nums和目标元素target作为参数,并返回目标元素在数组中的索引(如果找到)或者-1(如果未找到)。
  • 算法使用leftright两个指针来表示搜索范围。
  • 在每次迭代中计算中间元素的索引mid
  • 根据中间元素与目标元素的比较结果,将搜索范围缩小一半,并通过更新leftright指针来进行下一轮迭代。

实例演示

在上面的main方法中,我们定义了一个有序数组nums和目标元素target。调用binarySearch方法进行查找,并将结果打印输出。

总结

二分查找是一种高效的搜索算法,其时间复杂度为O(log n),其中n为数组的长度。 compared to linear search with O(n) complexity. 但需要注意的是,二分查找算法只适用于有序数组


原文地址: https://www.cveoy.top/t/topic/Q2O 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录