使用2d数组在c ++中进行二进制搜索

时间:2014-01-14 06:05:33

标签: c++ xcode function binary-search

写一个循环来询问用户gpa,并在用户输入负值时,在搜索结束循环之前检查它是否为负数。匹配时,打印相应的学号;如果没有匹配,请打印“不匹配”。

我正在研究二进制搜索功能。我想编码以检查并停止输入负数并在输入gpa时打印学生数(或“未找到”)。

void search (double AVGgpa[][NUM_STUDENTS])
{
    double gpa;

    int first = 0,                  
    last = NUM_STUDENTS - 1,
    mid,
    position = -1;
    int row = 2;
    bool found = false;         // not found yet

    cout << "Enter gpa(-1 to end): ";
    cin >> gpa;
    if (gpa==-1)
    {
        cout<<"You enter a nagative value"<<endl;
    }

    while (!found && first <= last)
    {
        mid = (first + last) / 2;     
        if (AVGgpa[row][mid]== gpa)  
        {
            cout << "found at index " << mid << endl;
            found = true;
        }
        else if (AVGgpa[row][mid]> gpa)
            last = mid - 1;        
        else   
            first = mid + 1;          
    }

1 个答案:

答案 0 :(得分:1)

假设您的数据正确并且数组按row排序,您可能因浮动不准确而遇到麻烦。

请查看以下问题以获取详细信息:What is the most effective way for float and double comparison?

由此您可以使用比较函数,如:

bool doubleCompare(double d1, double d2)
{
  static const double epsilon = 0.001;  // Define this as needed
  return std::fabs(d1 - d2) < epsilon;
}

如果帮助您,则应检查输入数据和/或发布更多代码,因为您的二进制搜索对我来说没问题。