繁体   English   中英

为什么当我放置偶数个元素时我的程序不起作用

[英]Why my program doesn't work when I put an Even Number of Elements

我正在尝试制作一个二进制搜索程序,而我的编码在下面,但是当我给出偶数个元素时,它不会提供任何输出,而当我给出奇数个元素时,该程序效果很好! 程序首先比较中间值(如果为false),然后比较小于或大于中间值

int main()
{
    int n,a[50] ;
    int i, j, temp,counter,searchv,f,l,mid;
    cout<<"Enter no. of elements: ";
    cin>>n;
    f=0;
    l=n-1;
    mid=(f+l)/2;
    cout<<"l= "<<l<<" mid= "<<mid<<"\n";
    cout<<"Enter "<<n <<" values \n";
    for(counter=0;counter<n;counter++)
    {
        cin>>a[counter];
    }

    for(j=0; j<n; j++)
    {
        for (int i=(n-1); i>j ;i--)
        {
            if (a[i]<a[i-1])
            {
                int temp=a[i-1];
                a[i-1]=a[i];
                a[i]=temp;
            }
        }
    }
    cout<<"SORTED ARRAY!!\n";
    for(counter=f;counter<n;counter++)
    {
        cout<<"Value at Element "<<counter <<" is "<<a[counter];

        cout<<endl;
    }
    cout<<"Enter number to search: ";
    cin>>searchv;

    if(a[mid]==searchv)
    {
        cout<<"searched value "<<searchv<<" founded at position "<<mid;
    }
    else if(searchv>a[mid])
    {
        for(counter=l;counter>mid;counter--)
        {
            if(a[counter]==searchv)
                cout<<"searched value "<<searchv<<" founded at position "<<counter;
            break;
        }
    }
    else if(searchv<a[mid])
    {
        for(counter=0;counter<mid;counter++)
        {
            if(a[counter]==searchv)
                cout<<"searched value "<<searchv<<" founded at position "<<counter;
            break;
        }
    }
    else
    {
        cout<<"Value not found\n";
    }
    getch();
    return 0;
}

您的错误与数组具有偶数还是奇数元素无关。 在您的两个线性搜索循环中,例如:

    for (counter = l; counter > mid; counter--) {
        if (a[counter] == searchv)
            cout << "searched value " << searchv <<
                " founded at position " << counter << '\n';
        break;
    }

break了循环无条件的。 这意味着您仅测试范围的第一个元素。 当然,您只想找到匹配项就中断,因此应使用花括号:

    for (counter = l; counter > mid; counter--) {
        if (a[counter] == searchv) {
            cout << "searched value " << searchv <<
                " founded at position " << counter << '\n';
            break;
        }
    }

如果您习惯于一致地缩进并使用花括号,则这样的错误更容易发现,也许除了最基本的if之外没有else

使用此修复程序,您的程序将仅报告匹配项,但不会报告任何错误,因为逻辑上永远不会发生else情况,因为前三个if / else涵盖了所有可能的情况。 (对于整数, a == ba < ba > b涵盖所有情况。)

您可以通过保留一个额外的变量(告诉您是否已找到匹配项)或将搜索重构为一个单独的函数来修复此问题,无论如何建议这样做。

根据以上答案,您可以添加

代替

if(a[mid]==searchv)
    {
    cout<<"searched value "<<searchv<<" founded at position "<<mid;
    }
    else if(searchv>a[mid])
    {
    for(counter=l;counter>mid;counter--)
    {
        if(a[counter]==searchv)
    cout<<"searched value "<<searchv<<" founded at position "<<counter;
    break;
    }
    }
    else if(searchv<a[mid])
    {
    for(counter=0;counter<mid;counter++)
    {
    if(a[counter]==searchv)
    cout<<"searched value "<<searchv<<" founded at position "<<counter;
    break;
    }
    }

else
{
     cout<<"Value not found\n";
}

你可以试试这个:

    bool isFound = false;

    for(counter=0;counter<l;counter++)
    {
        if(a[counter]==searchv)
        {
            cout<<"searched value "<<searchv<<" founded at position "<< counter << endl;
            isFound = true;

        }
    }

    if (isFound == false)
    {
        cout << "No result found." << endl;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM