当它在其中获得“大”数组时,我对这种方法有疑问。当我输入带有 10 个数字的数组时,它工作正常。但是,如果我插入 1000 万甚至 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
第一次出现。