📜  数据结构-二元搜索(1)

📅  最后修改于: 2023-12-03 15:10:19.945000             🧑  作者: Mango

数据结构-二元搜索

概述

二元搜索(Binary search)是一种使用分治法(Divide and conquer)策略的算法,用于在已排序的数组中进行搜索操作。对于一个有序数组,我们可以通过比较中间元素的值和目标值的大小关系来确定下一步查找的区间,从而将搜索的时间复杂度降至 O(logn)。

实现过程
  • 选择数组的中间元素作为“被查找区间”的中间点;
  • 将要查找的值与中间点的值进行比较,如大于中间点的值,则说明要查找的值在右半部分,否则在左半部分;
  • 以新的区间(左半部分或右半部分)为“被查找区间”,重复上述过程,直到查找到目标值或查询区间为空。
代码实现
Python
def binary_search(array, low, high, target):
    if high >= low:
        mid = (low + high) // 2
        if array[mid] == target:
            return mid
        elif array[mid] > target:
            return binary_search(array, low, mid - 1, target)
        else:
            return binary_search(array, mid + 1, high, target)
    else:
        return -1
Java
public class BinarySearch {
    public static int search(int[] array, int target) {
        int low = 0, high = array.length - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (array[mid] == target) {
                return mid;
            } else if (array[mid] > target) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return -1;
    }
}
C++
int binary_search(int array[], int low, int high, int target) {
    if (high >= low) {
        int mid = (low + high) / 2;
        if (array[mid] == target) {
            return mid;
        } else if (array[mid] > target) {
            return binary_search(array, low, mid - 1, target);
        } else {
            return binary_search(array, mid + 1, high, target);
        }
    } else {
        return -1;
    }
}
总结

二元搜索是一种高效的搜索算法,但前提是数组必须是有序的。在实际应用中,可以使用二元搜索来查找数据、寻找边界等。二元搜索在处理海量数据时表现出色,它的时间复杂度为 O(logn),具有很好的时间效率。