分治法之二分查找

思路:

  1. 确定查找范围:开始时,将整个有序数组作为查找范围。
  2. 比较中间元素:计算查找范围的中间元素的索引 mid,并将其与目标值进行比较。
    • 如果中间元素等于目标值,则查找成功,返回中间元素的索引。
    • 如果中间元素大于目标值,则在左半部分继续查找,将查找范围缩小为左半部分。
    • 如果中间元素小于目标值,则在右半部分继续查找,将查找范围缩小为右半部分。
  3. 递归查找:根据比较结果,选择在左半部分或右半部分继续进行折半查找,直到找到目标值或查找范围为空。
  4. 查找结果:如果找到目标值,返回其索引;否则返回一个表示未找到的标识(如-1)。

注意:二分查找的数组是有序的数组

代码:

#include 
using namespace std;

// 递归实现折半查找
int binarySearch(int arr[], int left, int right, int target) {
    if (left >= right) {
        return -1;
    }
        int mid = (left + right) / 2;
        
        // 如果目标值与中间元素相等,则返回中间元素的索引
        if (arr[mid] == target) {
            return mid;
        }
        
        // 如果目标值小于中间元素,则在左半部分继续查找
        if (arr[mid] > target) {
            return binarySearch(arr, left, mid - 1, target);
        }
        
        // 否则,在右半部分继续查找
        return binarySearch(arr, mid + 1, right, target);
    
    // 如果未找到目标值,返回-1表示未找到
 
}

int main() {
    int arr[] = { 2, 3, 4, 10, 40 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int target;
    cin >> target;
    int result = binarySearch(arr, 0, n - 1, target);
        cout << "目标值在索引 " << result << " 处找到";
    return 0;
}

你可能感兴趣的:(数据结构与算法,算法,数据结构)