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

binary search in c++ using 2d array

本文关键字:二进制 搜索 数组 2d c++      更新时间:2023-10-16

编写一个循环,询问用户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;          
}

假设您的数据是正确的,并且数组按row排序,那么您可能会因为float不准确而遇到麻烦。

请看以下问题了解详细信息:浮动和双重比较最有效的方法是什么?

从中可以使用比较函数,如:

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

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