自己写了个二分查找,但是函数里的打印信息和main里打印的值不一样,大家进来看一下!!
#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 == number){
printf("%d %d %d %d\n", mid, data, first, last);
return mid;
}
if(first >= last){
return -1;
}
if(data > number){
search(data, first, mid-1, number);
}
if(data < 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);
int x = search(data, 0, len-1, 5);
printf("%d\n", x);
system("pause");
return 0;
}
main中打印的值是8,然后在search函数中打印的Mid的值是6,用的是code::blocks编译器
附上我的终端打印结果:
6 5 6 6
8
请按任意键继续. . . 因为你这个二分查找,只找了一次。 虽然有递归地查找,但是递归结果没有返回给自己,所以白白递归了。 下面附上二分搜索迭代版的代码
int binary_search(int* array, int l, int r, int target)
{
/*
在数组下标为 的区间内搜索 target
*/
static int mid;
while(l <= r)
{
mid = (l + r) >> 1;
if(array == target)
return mid;
else if(array < target)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
请注意搜索区间开闭的区别 qq1256740918 发表于 2020-8-25 14:52
虽然有递归地查找,但是递归结果没有返回给自己,所以白白递归了。
啥意思?不是用了一个变量保存函数的返回值了吗? 来智慧 发表于 2020-8-30 19:04
啥意思?不是用了一个变量保存函数的返回值了吗?
在大于(小于)的分支里,没有返回 递归到return mid;之后就会回溯 本帖最后由 baige 于 2020-8-30 20:46 编辑
打错了
页:
[1]