使用模板化动态数组类和迭代器创建二进制搜索时遇到了一些麻烦。在我的班级中,我有以下函数导致无限循环。
iterator binarySearch(const T& value)
{
T * indexOfFirst = begin();
T * indexOfLast = (end() - 1);
size_t tempSize = m_size;
while (indexOfFirst <= indexOfLast)
{
tempSize = (tempSize / 2);
T * indexOfMiddle = ((m_array) + tempSize);
if (value > *indexOfMiddle)
{
indexOfFirst = (indexOfMiddle + 1);
}
else if (value < *indexOfMiddle)
{
indexOfLast = (indexOfMiddle - 1);
}
else
{
return (indexOfMiddle - 1);
}
}
return (end());
}
在我的main函数中,我使用以下代码来测试二进制搜索。目前,我正在使用一个整数数组来执行测试。我的数组是:{2,4,6,8,32,64,128}。
if (value > *indexOfMiddle)
如您所见,数字8在数组中。但是,我的搜索只是进入一个循环。如果我将数组切换为{2,4,8,16,32},那么它会报告它找到了数字8.任何帮助都将非常感激。先感谢您。我知道我的搜索逻辑有问题,但我无法追踪它。
答案 0 :(得分:2)
如果其他人做了你的作业,那就不好玩,但我会提出一个建议。如果您cout
之后的所有关键变量
while (indexOfFirst <= indexOfLast)
我敢打赌你会立即看到问题。