基本查找算法

基本查找算法

基本查找算法

1. 顺序查找

public static int sequentialSearch(int[] arr, int target) {
    // 遍历数组
    for (int i = 0; i < arr.length; i++) {
        // 如果当前元素等于目标元素,则返回索引
        if (arr[i] == target) {
            return i;
        }
    }
    // 如果未找到,则返回 -1
    return -1;
}

2. 二分查找

public static int binarySearch(int[] arr, int target) {
    int left = 0; // 左指针
    int right = arr.length - 1; // 右指针
    while (left <= right) {
        int mid = left + (right - left) / 2; // 计算中间位置
        if (arr[mid] == target) {
            return mid; // 找到目标元素,返回索引
        } else if (arr[mid] < target) {
            left = mid + 1; // 目标元素在右半部分,调整左指针
        } else {
            right = mid - 1; // 目标元素在左半部分,调整右指针
        }
    }
    return -1; // 如果未找到,则返回 -1
}

3. Hash查找

public static int hashSearch(int[] arr, int target) {
    int size = arr.length;
    int[] hashTable = new int[size]; // 哈希表
    Arrays.fill(hashTable, -1); // 初始化哈希表

    // 构建哈希表
    for (int i = 0; i < size; i++) {
        int hash = arr[i] % size; // 计算哈希值
        while (hashTable[hash] != -1) {
            // 处理哈希冲突
            hash = (hash + 1) % size;
        }
        hashTable[hash] = arr[i]; // 将元素存入哈希表中
    }

    // 在哈希表中查找目标元素
    int hash = target % size; // 计算目标元素的哈希值
    while (hashTable[hash] != -1) {
        if (hashTable[hash] == target) {
            return hash; // 找到目标元素,返回索引
        }
        hash = (hash + 1) % size;
    }
    return -1; // 如果未找到,则返回 -1
}