其他分享
首页 > 其他分享> > c – 发现二分,而不是停止

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