C语言算法——实现二分查找

#include <stdio.h>
int main()
{
    int search(int *p,int len,int x);  //函数的声明
    int a[] = {1,2,3,5,7,8,9};  //二分查找是针对排好序的数组而言的。
    int *p = a;         //指针指向数组a的首地址
    int len = sizeof(a)/sizeof(int);//求出数组的长度
    int x ;
    printf("请输入你要查找的数:");
    scanf("%d",&x);
    int t = search(p, len, x);
    if(t==-1)
        printf("你要查找的数%d不在数组中!!!",x);
    else
        printf("你查找的数%d在数组中的下标为:%d",x,t);
    printf("\n");
}

int search(int *p,int len,int x){  //该函数用于二分查找算法
    int temp,low=0,high=len-1;      //low和high表示在这两个变量的范围内进行查找我们我要查找的数,也是在这两个数之间进行二分法
    while(low<=high){
        temp = (low+high)/2;   //查找low和high之间中间的下标。这也是二分查找的精髓
        if(p[temp]==x)
            return temp;  //如果查找到了,就返回这个数在数组中的下标。
        else if(x<p[temp])
            high = temp-1; //如果查找的数比二分查找得到中间的数还要小,那么就将high的指向指向一半前面的那一个数,在继续进行二分查找。
        else if(x>p[temp])
            low = temp+1; //如果查找的数比二分查找得到中间的数还要大,那么就将high的指向指向一半后面的那一个数,在继续进行二分查找。
    }
    return -1; //上面循环查找我们要得到的值,如果没有查找到,循环就会跳出,这个时候就返回-1,表示没有查到我们要得到的值。
}

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值