**
C语言实现折半查找
以及纠结了我好久的一个坑
**
简单粗暴,来,吸纳看代码
int Search(int nums[], int numssize, int target)
{
assert(nums != NULL);//重点:对指针进行判空
int left = 0;
int right = numssize;
while (left <= right)
{
int mid = (left + right) / 2;//mid不能定义在while外面,不然每执行一趟循环mid还是等于初始值2
if (nums[mid] > target)
{
right = mid - 1;
}
else if (nums[mid] < target)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int nums[] = { 2, 4, 6, 8, 9 };
int numssize = sizeof(nums) / sizeof(nums[0]) - 1;
int target = 7;
int index = Search(nums, numssize, target);
printf("%d\n", index);
return 0;
}
注意:
· 第一个注释,对指针判空
· 第二个注释mid要写在循环里不然就成死循环了。。
不知道为啥,我代码vs都跑过了,在leetcode里执行也没问题,就是提交的时候就会说我执行有错,提示错在第29行,可是问我代码并没有29行(小生bb),问同学ing。。。
不管怎样,加油鸭!!!