查找

86 阅读1分钟

线性查找

👋线性查找是最简单的查找算法,它从数组的一端开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组。

template<typename Container, typename T>  
bool linearSearch(const Container& container, const T& value) {  
    for (const auto& elem : container) {  
        if (elem == value) {  
            return true; // 找到元素  
        }  
    }  
    return false; // 没有找到元素  
}  

二分查找

💡二分查找是一种高效的查找算法,它要求数组必须是已排序的。二分查找每次比较数组中间的元素,如果中间元素正好是目标值,则查找结束;如果目标值小于中间元素,则在数组的左半部分继续查找;如果目标值大于中间元素,则在数组的右半部分继续查找。

template<typename Container, typename T>  
bool binarySearch(const Container& container, const T& value) {  
    int left = 0;  
    int right = container.size() - 1;  
  
    while (left <= right) {  
        int mid = left + (right - left) / 2;  
        if (container[mid] == value) {  
            return true; // 找到元素  
        } else if (container[mid] < value) {  
            left = mid + 1;  
        } else {  
            right = mid - 1;  
        }  
    }  
    return false; // 没有找到元素  
}