如何使用二进制搜索C++从二维数组中输出数据
How to output data from a two dimensional array by using binary search C++?
我正在执行的一个函数使用二进制搜索来搜索2行12列的二维数组。第一行是学生证,所以总共有12名学生。第二行有每个学生对应的GPA。我坚持的部分是,当用户输入要搜索的学生ID时,使用二进制搜索来显示2D阵列中12名学生之一的GPA。我已经为二进制搜索想出了这个,但我认为当用户输入要搜索的学生ID时,它不会显示学生的相应GPA。任何帮助都会很棒!
void search(double avg[][COLUMNS])
int number; // number is the student ID the user entered already
int first = 0,
last = MAX - 1,
mid,
position = -1;
int row = 2;
bool found = false;
while (!found && first <= last)
{
mid = (first + last) / 2;
if (avg[row][mid] == number)
{
cout << "found at index " << mid << endl;
found = true;
}
else if (avg[row][mid] > number)
last = mid - 1;
else
first = mid + 1;
}
对于二进制搜索,必须对搜索的数据进行排序。在您的情况下,在将二维数组传递给搜索之前,必须按学生ID对其进行排序。
如果数组的维数是[2][12],那么当您执行row = 2
时,您就超出了2D数组的界限。C++是基于0的索引。如果ID是第一行,则需要执行row = 0
。我在下面重写了您的代码,并做了一些更改。
首先:我删除了find变量,因为它不是必需的(您可以只使用low<high和break语句)。
第二:修正了假设ID是第一行,GPA是第二行的越界索引。
第三:传入要搜索的id。由于您有一个double数组,所以我使用传入的ID来搜索double。
void search(double students[][COLUMNS], double id){
int low(0), high(COLUMNS);
int ID(0), GPA(1); // Row 1 is ID (index 0), Row 2 is GPA (index 1).
while (low <= high){
int mid = (low+high)/2;
if (students[ID][mid] < id)
low = mid;
else if (students[ID][mid] > id)
high = mid;
else {
cout << "Found at index " << mid << " with GPA: "
<< students[GPA][mid] << endl;
break;
}
}
}
编辑:我可能建议创建一个存储学生信息的对象数组,而不是2D数组。下面的课应该做得很好。
class Student{
public:
int ID;
double GPA;
Student(int id = 0, double gpa = 4.0):ID(id),GPA(gpa){}
bool operator < (const Student& s){
return ID < s.ID;
}
}
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 二维数组的输出结果
- C++使用二维数组的程序,该数组要求用户输入两次.它需要将这些输入显示为输出
- 输出二维数组
- 将二维数组从数据文件传递给函数并输出内容
- 二维数组未显示正确的输出
- 如何使用二进制搜索C++从二维数组中输出数据
- 无法将二维数组中的数据打印到C++的输出文件
- 当我尝试输出一个二维数组时,它输出了错误的数字
- 二维数组输出一个连续的行
- 如何在c++中输出二维数组的偶数列索引并对其进行计算