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) {
            return mid;
        }

        // 如果目标值在左半部分,则继续在左半部分进行二分查找
        if (arr[mid] > target) {
            right = mid - 1;
        }
        // 如果目标值在右半部分,则继续在右半部分进行二分查找
        else {
            left = mid + 1;
        }
    }

    // 目标值不存在于数组中
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
    int n = sizeof(arr) / sizeof(arr[0]);

    int target;
    printf('请输入要查找的值:');
    scanf('%d', &target);

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

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

    return 0;
}

代码解析:

  1. binarySearch 函数:

    • 接受一个有序数组 arr、查找范围的左边界 left、右边界 right 和目标值 target 作为参数。
    • 使用循环不断缩小查找范围:
      • 计算中间元素的索引 mid
      • 如果中间元素等于目标值,则返回 mid
      • 如果目标值小于中间元素,则在左半部分继续查找,更新 rightmid - 1
      • 如果目标值大于中间元素,则在右半部分继续查找,更新 leftmid + 1
    • 如果循环结束仍未找到目标值,则返回 -1 表示目标值不存在。
  2. main 函数:

    • 定义一个有序数组 arr 并计算其长度 n
    • 提示用户输入要查找的值,存储在变量 target 中。
    • 调用 binarySearch 函数进行查找,将返回值存储在 result 中。
    • 根据 result 的值输出相应的查找结果:
      • 如果 result 为 -1,则表示目标值不存在于数组中。
      • 否则,输出目标值在数组中的索引位置。

注意事项:

  • 以上代码假设输入的有序数组是升序排列的。如果输入数组是降序排列的,需要修改 binarySearch 函数中的比较逻辑。
  • 二分查找算法的效率比线性查找高很多,尤其是在大型数据集中。

希望这篇博客能够帮助你理解如何在C语言中实现二分查找算法。如果你有任何问题,请随时在下方留言。

C语言二分查找算法:在有序数组中查找指定值

原文地址: http://www.cveoy.top/t/topic/f4kE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录