Linear搜索始终返回-1求助:函数仅执行else分支未触发匹配逻辑
你的线性搜索总是返回-1?问题出在这儿!
嘿,我一眼就瞅出你代码里的问题啦!你的线性搜索函数犯了个超容易踩的小错误——你把return -1放在了循环的else分支里,这直接导致函数根本没机会遍历整个数组!
问题根源
正常的线性搜索逻辑应该是:
- 遍历数组里的每一个元素
- 找到和目标值匹配的元素,立刻返回它的索引
- 等整个数组都遍历完了还没找到匹配项,再返回-1表示目标不存在
但你现在的代码里,循环第一次执行时,只要第一个元素v[0]不等于目标值n,就会直接进入else分支返回-1,后面的元素连被检查的机会都没有!这就难怪每次搜索都返回-1了。
修正后的代码
把return -1移到循环外面,让函数只有在遍历完所有元素都没找到匹配项时才返回-1:
#include <stdio.h> #include <stdlib.h> #define size 50000 int search(int n, int s, int v[s]) { int i; for(i = 0; i < s; ++i) { if(v[i] == n) { return i; // 找到匹配项,返回索引 } // 不匹配就继续循环下一个元素,这里别放return! } // 遍历完整个数组都没找到,才返回-1 return -1; } int main(void) { int valores[size]; // 初始化向量并赋值 for(int i = 0; i < size; ++i) valores[i] = (i + 1) * 2; // 举个测试例子:搜索值为4的元素,应该返回索引1 int result = search(4, size, valores); printf("搜索结果:%d\n", result); // 正确输出应为1 return 0; }
额外小提醒
C语言里函数参数的数组写法int v[s]其实等价于int *v,两种写法都能用,这不影响搜索逻辑,只是个小知识点~
内容的提问来源于stack exchange,提问作者user7391306
相关产品推荐
相关产品推荐

