我试图通过修改二进制搜索算法来实现它。
int search(int *a, int start,int end,int sum){
int s=start,e=end-1,m;
while(s <= e){
m=s+(e-s)/2;
if(a[m] == sum){
return m+1;
}
else if (a[m] < sum) {
s = m + 1;
}
else {
e = m - 1;
}
}
return m;}
上述算法有什么问题?
答案 0 :(得分:1)
int search(int *a, int start,int end, int sum) {
int s = start, e = end - 1, m;
while(s <= e) {
更简单
// m=s+(e-s)/2;
m=(s+e)/2;
你必须保持循环,也许有重复的元素
// if(a[m] == sum){
// return m+1;
// } else
请注意条件已更改为<=
// if (a[m] < sum) {
if (a[m] <= sum) {
s = m + 1;
}
else {
e = m - 1;
}
}
必须在此处返回s
// return m;
return s;
}