折半查找法c语言代码

以下是一个使用折半查找法的C语言代码示例:

#include <stdio.h>

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

        // 如果目标值在中间元素的左侧,缩小右边界
        if (arr[mid] > target) {
            right = mid - 1;
        }
        // 如果目标值在中间元素的右侧,缩小左边界
        else if (arr[mid] < target) {
            left = mid + 1;
        }
        // 如果中间元素就是目标值,返回索引
        else {
            return mid;
        }
    }

    // 如果没有找到目标值,返回-1
    return -1;
}

int main() {
    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 12;

    int result = binarySearch(arr, 0, n - 1, target);

    if (result == -1) {
        printf("目标值 %d 不存在于数组中\n", target);
    } else {
        printf("目标值 %d 存在于数组中,索引为 %d\n", target, result);
    }

    return 0;
}

这个代码示例中,我们定义了一个binarySearch函数来执行折半查找。该函数接受一个已排序的整数数组arr、左边界left、右边界right和目标值target作为参数。在函数中,我们使用一个循环来不断缩小搜索范围,直到找到目标值或搜索范围为空。

main函数中,我们定义了一个已排序的整数数组arr,并计算数组的长度n。然后,我们调用binarySearch函数来查找目标值target在数组中的索引。最后,根据返回的结果,我们打印出相应的提示信息。

在这个示例中,目标值12存在于数组中,因此输出为"目标值 12 存在于数组中,索引为 5"。

折半查找法(Binary Search)是一种高效的查找算法,适用于已排序的数组。它的基本思想是将数组分成两部分,然后通过比较目标值与中间元素的大小关系,来确定目标值可能存在的区间,然后再在该区间内进行查找,不断缩小搜索范围,直到找到目标值或搜索范围为空。

以下是折半查找法的C语言代码实现:

#include <stdio.h>

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

        // 如果中间元素就是目标值,返回索引
        if (arr[mid] == target) {
            return mid;
        }
        // 如果目标值在中间元素的左侧,缩小右边界
        else if (arr[mid] > target) {
            right = mid - 1;
        }
        // 如果目标值在中间元素的右侧,缩小左边界
        else {
            left = mid + 1;
        }
    }

    // 如果没有找到目标值,返回-1
    return -1;
}

int main() {
    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 12;

    int result = binarySearch(arr, 0, n - 1, target);

    if (result == -1) {
        printf("目标值 %d 不存在于数组中\n", target);
    } else {
        printf("目标值 %d 存在于数组中,索引为 %d\n", target, result);
    }

    return 0;
}

在这个代码示例中,我们定义了一个binarySearch函数来执行折半查找。该函数接受一个已排序的整数数组arr、左边界left、右边界right和目标值target作为参数。在函数中,我们使用一个循环来不断缩小搜索范围,直到找到目标值或搜索范围为空。

main函数中,我们定义了一个已排序的整数数组arr,并计算数组的长度n。然后,我们调用binarySearch函数来查找目标值target在数组中的索引。最后,根据返回的结果,我们打印出相应的提示信息。

在这个示例中,目标值12存在于数组中,因此输出为"目标值 12 存在于数组中,索引为 5"。如果目标值不存在于数组中,输出为"目标值 12 不存在于数组中"。