C语言折半查找怎么实现

发布时间:2022-05-07 09:27:23 作者:iii
来源:亿速云 阅读:179

C语言折半查找怎么实现

折半查找(Binary Search)是一种高效的查找算法,适用于在有序数组中查找特定元素。它的时间复杂度为 O(log n),相比线性查找的 O(n),效率更高。本文将详细介绍如何在C语言中实现折半查找。

折半查找的基本思想

折半查找的核心思想是通过不断缩小查找范围来快速定位目标元素。具体步骤如下:

  1. 初始化两个指针:low 指向数组的起始位置,high 指向数组的末尾位置。
  2. 计算中间位置 mid = (low + high) / 2
  3. 比较中间位置的元素与目标值:
    • 如果中间元素等于目标值,查找成功,返回该位置。
    • 如果中间元素大于目标值,说明目标值在左半部分,将 high 更新为 mid - 1
    • 如果中间元素小于目标值,说明目标值在右半部分,将 low 更新为 mid + 1
  4. 重复步骤2和3,直到 low 大于 high,此时查找失败,返回 -1。

C语言实现折半查找

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

#include <stdio.h>

// 折半查找函数
int binarySearch(int arr[], int size, int target) {
    int low = 0;
    int high = size - 1;

    while (low <= high) {
        int mid = low + (high - low) / 2; // 防止溢出

        if (arr[mid] == target) {
            return mid; // 找到目标值,返回索引
        } else if (arr[mid] < target) {
            low = mid + 1; // 目标值在右半部分
        } else {
            high = mid - 1; // 目标值在左半部分
        }
    }

    return -1; // 未找到目标值
}

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

    int result = binarySearch(arr, size, target);

    if (result != -1) {
        printf("元素 %d 在数组中的索引是 %d\n", target, result);
    } else {
        printf("元素 %d 不在数组中\n", target);
    }

    return 0;
}

代码解析

  1. binarySearch 函数

    • 参数 arr[] 是待查找的有序数组。
    • 参数 size 是数组的大小。
    • 参数 target 是要查找的目标值。
    • 函数返回目标值在数组中的索引,如果未找到则返回 -1。
  2. mid 的计算

    • 使用 mid = low + (high - low) / 2 而不是 mid = (low + high) / 2,是为了防止 low + high 溢出。
  3. 循环条件

    • while (low <= high) 确保查找范围始终有效。
  4. 查找结果

    • 如果找到目标值,返回其索引;否则返回 -1。

示例运行

对于数组 {1, 3, 5, 7, 9, 11, 13, 15},查找目标值 7,程序输出:

元素 7 在数组中的索引是 3

折半查找的优缺点

优点

缺点

总结

折半查找是一种高效的查找算法,适用于静态有序数组。通过不断缩小查找范围,它能够快速定位目标元素。在实际开发中,如果需要频繁查找且数据量较大,折半查找是一个不错的选择。

推荐阅读:
  1. 折半查找法
  2. C语言之折半查找(二分查找)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:Pytorch怎么搭建SRGAN平台提升图片超分辨率

下一篇:vue项目部署跨域问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》