用c语言实现二分法

#首先二分法的优点是可以在有序的和大量的数组更快的查找到目标;

(简单介绍一下二分法)

二分法,也称为二分查找,是一种在有序数组中查找特定元素的算法。它的基本思想是通过将数组分成两部分,然后确定目标元素可能存在的那一部分,然后继续在该部分中进行查找,直到找到目标元素或确定目标元素不存在为止。

具体来说,二分法的步骤如下:
1. 首先确定数组的中间元素。
2. 如果中间元素等于目标元素,则返回中间元素的索引。
3. 如果中间元素大于目标元素,则在左半部分继续查找。
4. 如果中间元素小于目标元素,则在右半部分继续查找。
5. 重复上述步骤,直到找到目标元素或确定目标元素不存在。

二分法的时间复杂度为O(log n),因此它是一种高效的查找算法。它通常用于有序数组或有序列表中查找元素,例如在查找算法中常用的二分查找。

以下就是代码加注释;

简单介绍一下思路:

1.输出数组   2.获得数组长度,目标元素  3.进行判断 (详情请见代码)

 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int bin(int arr[], int n, int key)
{
    int left = 0;      //左下标
    int right = n - 1; //右下标

    while (left<=right)
    {
        int mid = left + (right - left) / 2;

        if (arr[mid] > key)
        {
            //当中间值大于key,则目标在mid的左侧,于是-1,对半砍去mid
            right = mid - 1;
        }
        else if (arr[mid]<key)
        {
            //当中间值小于key,则目标在mid的右侧,于是+1,对半砍去mid
            left = mid + 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}

int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    //            0 1 2 3 4 5 6 7 8 9
    int n = sizeof(arr) / sizeof(arr[0]);
    //确定数组的长度
    int key= 8;
    //此为目标元素
    int ok = bin(arr, n, key);
    //将我们要实现的功能外包出去;

    //最后进行判断
    if (ok != -1)
    {
        //由外包函数查找完输出
        printf("这个值的下标为%d\n", ok);
    }
    else
    {
        //超出数组的长度,即不存在
        printf("这个值不在数组中\n");
    }

    return 0;
}

 (代码)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int bin(int arr[], int n, int key)
{
    int left = 0;      //左下标
    int right = n - 1; //右下标

    while (left<=right)
    {
        int mid = left + (right - left) / 2;

        if (arr[mid] > key)
        {
            //当中间值大于key,则目标在mid的左侧,于是-1,对半砍去mid
            right = mid - 1;
        }
        else if (arr[mid]<key)
        {
            //当中间值小于key,则目标在mid的右侧,于是+1,对半砍去mid
            left = mid + 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}

int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    //            0 1 2 3 4 5 6 7 8 9
    int n = sizeof(arr) / sizeof(arr[0]);
    //确定数组的长度
    int key= 8;
    //此为目标元素
    int ok = bin(arr, n, key);
    //将我们要实现的功能外包出去;

    //最后进行判断
    if (ok != -1)
    {
        //由外包函数查找完输出
        printf("这个值的下标为%d\n", ok);
    }
    else
    {
        //超出数组的长度,即不存在
        printf("这个值不在数组中\n");
    }

    return 0;
}

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值