C语言二分法查找

一点点小心得

这个求数组的长度大小,不能在那个方法里面去求,因为数组传过去之后,本质上传过去的是数组首元素的地址,所以如果在方法里面求大小,那判断的字节是指针的,所以肯定是求不出来的

然后这个查找方法就是,每次取数组中间的数和目标数进行比较,要是中间的数比目标数小,就往右边缩小范围,zuo就等于刚刚的中间数,然后zuo+you/2再来求新的中间数再去和目标数进行比较。循环往复,当中间数和目标数重合了,那说明就是找到了。

/**
 * 二分法查找
 */
int chazhao(int ar[], int i, int size) {
    int zuo = 0;
    int you = size - 1;
    while (zuo <= you) {
        int mid = (zuo + you) / 2;
        if (ar[mid] < i) {
            zuo = mid+1;
        } else if (ar[mid] > i) {
            you = mid-1;
        } else {
            return mid;

        }
    }
    return -1;
}
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int i = 7;
    int size = sizeof(arr) / sizeof(int);
    int tt = chazhao(arr, i, size);
    if (tt != -1) {
        printf("这个数存在,下标是:%d", tt);
    } else {
        printf("这个数不存在");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值