我几乎肯定这是一件简单的事情,但我不能为我的生活弄清楚它。这整个代码是打印一个菜单,询问用户和数组大小,然后用随机数填充它,对其进行升序和降序排序,打印数组,并让用户使用二分搜索或顺序搜索。我知道线性搜索对于我们应该做的事情来说效率要高很多,但教练坚持要进行二分搜索。我有二进制搜索工作,并打印出正确的结果,但在其结尾处有一个1(即位置14出现为141)。下面是调用该函数的开关情况:二进制搜索在输出结束时不断添加1
case 7:
int num, result;
cout << "Please enter an int to search for" << endl;
cin >> num;
result = binarySearch(Array1, num, 0, size);
cout << num << "was found at position " << result;
break;
}
}
这里是功能:
int binarySearch(int arr[], int key, int first, int last)
{
while (first <= last)
{
int mid = (last + first)/2;
if (key < arr[mid])
{
last = mid - 1;
}
else if (key > arr[mid])
{
first = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
你不这样做'COUT << ENDL。; '所以额外的'1'来自其他地方。 – Roddy
因为1是打印出来的,不管你是什么搜索,二进制搜索逻辑不太可能存在问题。 binarySearch方法是正确的。你可以发布切换条件后发生的事情吗? –
这就是为什么你应该在提出问题之前尝试做一个简洁的测试用例。你会发现你认为的问题是问题不是问题。 – Cogwheel