Это довольно легко понять:
for(i = start; i < v.size(); i++){
if(v[i] == key){
result = i;
}
else{
result = -1;
}
}
Допустим, ваш вектор содержит [1, 2, 3, 4] и вы ищете 2, начиная с индекса 0: вот что делает ваш код:
i = 0: (v[i] : 1) == 2 -> false: result = -1
i = 1: (v[i] : 2) == 2 -> true: result = 1
i = 2: (v[i] : 3) == 2 -> false: result = -1
i = 3: (v[i] : 4) == 2 -> false: result = -1
Когда вы нашли свое значение, вы все равно продолжаете читать другое значение, в то время как вам следует остановиться.
- Либо используя
break
, либо напрямую возвращая (return i
) в условии v[i] == key
; - Либо путем проверки результата в условии for (
result == -1 && i < v.size()
)
За комментарий замечание: случай с break
и return
(последний не такой сложный):
int Sequential_Search(const vector<int>&v, int key, int start){
int result = -1; // important for 'break'
for(int i = start; i < v.size(); i++){
if(v[i] == key){
result = i; break;
}
}
return result;
}
int Sequential_Search(const vector<int>&v, int key, int start){
for(int i = start; i < v.size(); i++){
if(v[i] == key){
return i;
}
}
return -1;
}