鱼C论坛

 找回密码
 立即注册
查看: 1932|回复: 8

自己写了个二分查找,但是函数里的打印信息和main里打印的值不一样,大家进来看一下!!

[复制链接]
发表于 2020-8-22 09:08:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int search(int data[], int first, int last, int number)
{
    int mid = (last + first) / 2;

    if(data[mid] == number){
        printf("%d %d %d %d\n", mid, data[mid], first, last);
        return mid;
    }
    if(first >= last){
        return -1;
    }
    if(data[mid] > number){
        search(data, first, mid-1, number);
    }
    if(data[mid] < number){
        search(data, mid+1, last, number);
    }
}

int main()
{
    int data[] = {0, 1, 2, 2, 4, 4, 5, 8, 9, 9};
        int len = sizeof(data) / sizeof(data[0]);
        int x = search(data, 0, len-1, 5);
        printf("%d\n", x);
        system("pause");
        return 0;
}




main中打印的值是8,然后在search函数中打印的Mid的值是6,用的是code::blocks编译器









想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-22 09:11:15 | 显示全部楼层
附上我的终端打印结果:
6 5 6 6
8
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-25 14:51:41 | 显示全部楼层
因为你这个二分查找,只找了一次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-25 14:52:44 | 显示全部楼层
虽然有递归地查找,但是递归结果没有返回给自己,所以白白递归了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-25 15:01:10 | 显示全部楼层
下面附上二分搜索迭代版的代码
int binary_search(int* array, int l, int r, int target)
{
    /* 
        在数组下标为 [l, r] 的区间内搜索 target
    */

    static int mid;
    while(l <= r)
    {
        mid = (l + r) >> 1;

        if(array[mid] == target)
            return mid;
        else if(array[mid] < target)
            l = mid + 1;
        else
            r = mid - 1;
    }

    return -1;
}
请注意搜索区间开闭的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-30 19:04:23 | 显示全部楼层
qq1256740918 发表于 2020-8-25 14:52
虽然有递归地查找,但是递归结果没有返回给自己,所以白白递归了。

啥意思?不是用了一个变量保存函数的返回值了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 20:26:34 | 显示全部楼层
来智慧 发表于 2020-8-30 19:04
啥意思?不是用了一个变量保存函数的返回值了吗?

在大于(小于)的分支里,没有返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 20:39:47 | 显示全部楼层
递归到return mid;之后就会回溯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 20:42:13 | 显示全部楼层
本帖最后由 baige 于 2020-8-30 20:46 编辑

打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表