📜  二进制搜索的C程序(递归和迭代)(1)

📅  最后修改于: 2023-12-03 14:49:02.217000             🧑  作者: Mango

二进制搜索的C程序(递归和迭代)

二进制搜索(Binary Search)是一种在有序数组中查找目标元素的算法。该算法通过比较目标值与数组的中间元素来决定目标值在左半部分还是右半部分,并逐步缩小搜索范围,直到找到目标元素或搜索范围为空。

递归实现

以下是使用递归方式实现二进制搜索的C程序示例:

#include <stdio.h>

int binarySearchRecursive(int arr[], int target, int left, int right) {
    if (right >= left) {
        int mid = left + (right - left) / 2;

        if (arr[mid] == target)
            return mid;

        if (arr[mid] > target)
            return binarySearchRecursive(arr, target, left, mid - 1);

        return binarySearchRecursive(arr, target, mid + 1, right);
    }

    return -1;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int size = sizeof(arr) / sizeof(arr[0]);
    int target = 6;
    int result = binarySearchRecursive(arr, target, 0, size - 1);

    if (result == -1)
        printf("目标元素未找到\n");
    else
        printf("目标元素在数组中的索引为: %d\n", result);

    return 0;
}

此递归实现使用 binarySearchRecursive 函数进行二进制搜索。它接受一个有序数组 arr、目标元素 target、搜索范围的左边界 left 和右边界 right 作为参数,并根据中间元素的值将搜索范围缩小。如果找到目标元素,则返回其索引;否则,返回 -1。

迭代实现

以下是使用迭代方式实现二进制搜索的C程序示例:

#include <stdio.h>

int binarySearchIterative(int arr[], int target, int left, int right) {
    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (arr[mid] == target)
            return mid;

        if (arr[mid] < target)
            left = mid + 1;
        else
            right = mid - 1;
    }

    return -1;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int size = sizeof(arr) / sizeof(arr[0]);
    int target = 6;
    int result = binarySearchIterative(arr, target, 0, size - 1);

    if (result == -1)
        printf("目标元素未找到\n");
    else
        printf("目标元素在数组中的索引为: %d\n", result);

    return 0;
}

此迭代实现使用 binarySearchIterative 函数进行二进制搜索。它接受一个有序数组 arr、目标元素 target、搜索范围的左边界 left 和右边界 right 作为参数,并通过不断更新左右边界来缩小搜索范围。如果找到目标元素,则返回其索引;否则,返回 -1。

以上是二进制搜索的C程序示例,你可以根据需要选择递归或迭代的实现方式。这个算法在处理有序数组时非常高效,可以在时间复杂度为 O(log n) 的情况下找到目标元素。