无论我搜索什么值,程序都会在文件中找不到它。我无法弄清楚我的代码有什么问题。
int main()
{
int array1[MAX_NUMBER];
int length;
int number;
int location;
input (array1, MAX_NUMBER, length);
cout<<"Please enter a number to search for:"<<endl;
cin>>number;
location=search(array1, length, number);
if (location!=-1)
{
cout<<"The number "<<number<<" was found in the "<<location<<" position."<<endl;
}
else
{
cout<<"The number "<<number<<" was not found in the file."<<endl;
}
return 0;
}
void input(int a[], int size, int& number_used)
{
ifstream infile;
int input;
infile.open("numbers.txt");
if (infile.fail())
{
cout<<"Input file opening failed."<<endl;
exit(1);
}
int i;
for (i=0; i<=size; i++)
{
while (infile>>input)
{
a[i]=input;
cout<<a[i]<<endl;
}
}
number_used=i;
}
int search(const int a[], int number_used, int search_value)
{
int start=1;
int end=number_used;
int key=search_value;
while (start<=end)
{
int mid=((start+end)/2);
if (a[mid]==key)
{
return mid;
}
if (a[mid]>key)
{
end=mid-1;
}
else
{
start=mid+1;
}
}
return -1;
}
我的主要代码或搜索功能有问题吗?
输入文件:
1
5
6
7
11
19
21
23
33
54
78
97
例如,键入19,输出为“在文件中找不到数字19”。
答案 0 :(得分:2)
您没有在函数input
中正确填充数组。
您必须使用另一个索引在数组中存储值,否则i
将不会在a
中指示有效且有意义的索引:
int k = 0; // <--------------------------
int i;
for (i = 0; i <= size; i++)
{
while (infile >> input && k < size)
{
a[k] = input; // <----------------
k++; // <----------------
}
}
number_used = k; // <-------------
而且,正如WhozCraig评论的那样,您应该知道数组从0
而不是1
开始,因此在search
方法中:
int start = 0;
答案 1 :(得分:1)
您没有计算正确读取的值列表的长度。你在循环中有一个循环,它正在做一些奇怪的事情。
你应该做的更像是:
int i;
while (i < size && infile >> input)
{
a[i]=input;
cout<<a[i]<<endl;
i++;
}
number_used=i;
答案 2 :(得分:0)
二进制搜索要求数组已经排序。手动尝试您的算法:在[4,1,3,6,5]中找到数字4。 4大于中间元素,因此算法将转到数组的[4,6,5]部分。