我的二进制搜索和线性搜索的问题[关闭]

Posted

技术标签:

【中文标题】我的二进制搜索和线性搜索的问题[关闭]【英文标题】:Problems with my binary search and linear search [closed] 【发布时间】:2011-05-03 08:15:30 【问题描述】:

我尝试在搜索中同时使用二分搜索、while 循环和 for 循环,但同样的问题正在发生。

当我原来的程序来这个函数调用的时候,线性搜索函数(displayContent)总会给位置赋值-1,在函数调用之后程序中断退出。

我试图重新安排我的程序。就像我说的,我尝试了使用二分法和线性搜索的 for 循环和 while 循环。

我也在使用结构数据类型

struct info

    string name;
    double score[5];
    double avg;
;

这是我的函数调用

cout<<"Please enter the name of the person which you would like to search. ";
getline(cin, name);
cin.ignore();
displayContent(contestant, count, name);

这是我的函数定义

void displayContent(info contest[], int quantity, string id)

int position=-1;
bool found=false;

for(int index=0;index<quantity && !found;index++)

    if(contest[index].name.compare(id)==0)
    
        found=true;
        position=index;
    

    if(position==-1)
    
        cout<<"That person was not one of the contestants.";
    
    else
    
        cout<<"The scores for "<<contest[position].name<<" are \n     Contestant     Judge1  Judge2  Judge3  Judge4  Judge5  Average"
            <<"\n______________________________________________________________________"<<endl;
        cout<<right<<setw(15)<<fixed<<setprecision(1)    <<contest[position].name<<setw(10)<<contest[position].score[0]<<setw(8)<<contest[position].score[1]<<setw(8)<<contest[position].score[2]<<setw(8)<<contest[position].score[3]
        <<setw(8)<<contest[position].score[4]<<setw(8)<<contest[position].avg<<endl;
    

【问题讨论】:

【参考方案1】:

您是否确认getline 符合您的预期?也许name 包含一个行尾字符。要排除输入问题,您可以在调用displayContent 之前尝试为name 分配一个您知道存在于contestant 中的值。

我没有发现你的搜索算法有任何问题。

【讨论】:

你的回答确实帮助我发现我的错误不在我的输入或我的算法中,但由于其他未说明的原因,我将此函数调用嵌入到开关中,但该函数有效当我在交换机外使用它时非常好,所以我谢谢你。顺便说一句,当我在开关中使用此功能时,您知道为什么会发生这种情况吗? switch 语句可能会造成混淆。如果case 没有被break 终止,则代码“下降”到下一个case。此外,局部变量的范围仅在 switch 块内,而不是在每个 case 块内。如果您能够使用调试器单步执行代码,您应该能够确定问题的根源。否则你可以尝试插入额外的调试输出来验证感兴趣的变量的值。

以上是关于我的二进制搜索和线性搜索的问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

二分搜索与线性搜索奇怪的时间

线性和二进制搜索

线性和二进制搜索逻辑错误

使用迭代器位置的线性和二进制搜索

C 二进制和线性搜索

为啥这个线性和二进制搜索的基准代码不起作用?