这是我尝试实现二进制搜索方法以在 20 的数组中查找任意整数 X 并输出它在数组中出现的次数。
我的输出似乎是错误的,因为无论给定整数在数组中出现多少次,它都会输出 1。
有人可以帮助我并告诉我我的代码有什么问题吗?(我知道 20 很小,线性方法更容易实现,但我使用 20 来简化事情)
可以肯定的是,我输入了 imin = 0 和 imax = 19 的输入,我还确保我已经对数组进行了排序。
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int A[20] = {0};
int x;
int imin;
int imax;
int BinarySearch(int A[], int value, int low, int high, int count) {
if (high < low){
return -1; // not found
}
int mid = low + ((high - low) / 2);
if (A[mid] > value){
cout<< A[mid] << " > " << value <<endl;
return BinarySearch(A, value, low, mid-1, count);
}
else if (A[mid] < value){
cout<< A[mid] << " < " << value <<endl;
return BinarySearch(A, value, mid+1, high, count);
}
if (A[mid] == value){
cout<< A[mid] << " = " << value <<endl;
count = count + 1;
}
return count;
}
int main(){
cout<<"Enter 20 integers"<<endl;
for (int i = 0; i < 20;i++){
cin>>A[i];
}
cout<<"Enter the integer x"<<endl;
cin>>x;
cout<<"What is imin?"<<endl;
cin>>imin;
cout<<"What is imax?"<<endl;
cin>>imax;
int temp;
int i;
for (int j = 1; j < 20; j++){
i = j - 1;
temp = A[j];
while ((i>=0) && (A[i] > temp) )
{
A[i+1] = A[i];
i=i-1;
}
A[i+1] = temp;
}
int count = BinarySearch(A, x, imin, imax, 0);
cout<<count<<endl;
system("pause");
}
非常感谢
编辑:添加了一些更正。但我想二进制搜索算法似乎有问题!