c – 发现二分,而不是停止
作者:互联网
我有这个方法的问题,当它得到“大”数组.当我输入10个数字的数组时,它工作正常.但是,如果我插入10个数字甚至20个数字,方法永远不会结束,我找不到问题.
int bisection(int el, int* a, int n)
{
int i = 0;
if (n <= 0)
{
return -1;
}
else
{
do
{
int mid = (i + n) / 2;
if(el == a[i])
{
return i;
}
else if(el < a[n])
{
n = mid - 1;
}
else if(el > a[i])
{
i = mid + 1;
}
}while(i <= n);
}
}
我必须找到第一个数字,例如,如果我有数组:
indexs: 0 1 2 3 4 5 6 7 8
elements: 1,1,3,3,3,5,6,7,9
我正在寻找3号,我必须得到这个
result: (index) 2
第一次出现.
解决方法:
myusuf的答案几乎是正确的,但它并不总是返回第一次出现的索引.这是我的建议:
int bisection(int el, int* a, int n)
{
int i = 0;
while(i < n)
{
// search in range i (inclusive) to n (exclusive)
int mid = (i + n) / 2;
if (el == a[mid] && (mid == 0 || a[mid-1] < el))
return mid;
if (el <= a[mid])
n = mid;
else
i = mid + 1;
};
return -1;
}
标签:c,methods,bisection 来源: https://codeday.me/bug/20190825/1716323.html