数据结构与算法之二分搜索算法

二分搜索算法是一种常用的搜索算法,它可以在有序序列中查找指定元素,时间复杂度为 O(log n)。

二分搜索算法的原理是: 在有序序列中查找指定元素时,先取序列的中间位置元素,将其与指定元素进行比较,如果相等,则查找成功;如果中间位置元素大于指定元素,则在序列左半部分继续查找;否则,在右半部分继续查找。如此重复进行,直到找到指定元素或者查找完整个序列为止。

具体实现过程如下:

  1. 确定序列的起始和结束位置;
  2. 计算序列的中间位置;
  3. 比较中间位置元素和指定元素的大小关系;
  4. 如果相等,则查找成功,返回元素下标;
  5. 如果中间位置元素大于指定元素,则在左半部分继续查找,更新结束位置为中间位置;
  6. 如果中间位置元素小于指定元素,则在右半部分继续查找,更新起始位置为中间位置;
  7. 如此重复进行,直到找到指定元素或者查找完整个序列为止。

二分搜索算法适用于有序数组或者有序链表,对于无序序列则不适用。在实际应用中,二分搜索算法常用于快速查找有序序列中的元素,比如二分查找算法常用于搜索引擎中的关键词查找。

在这里插入图片描述

一、C 实现二分搜索算法及代码详解

二分搜索算法(也称为二分查找算法)是一种在有序数组中查找特定元素的搜索算法。该算法将数组中间的元素与目标元素进行比较,如果相等则返回该元素的索引,如果小于目标元素,则在数组的右半部分继续搜索;如果大于目标元素,则在数组的左半部分继续搜索。重复执行此过程直到找到目标元素或者确定目标元素不存在。

C 代码实现:

#include <stdio.h>

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

        // 如果目标元素在数组中间,则返回其索引
        if (arr[mid] == x)
            return mid;

        // 如果目标元素小于数组中间元素,则在左半部分继续查找
        if (arr[mid] > x)
            right = mid - 1;

        // 如果目标元素大于数组中间元素,则在右半部分继续查找
        else
            left = mid + 1;
    }

    // 如果目标元素不存在于数组中,则返回 -1
    return -1;
}

int main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值