#include <iostream>
using namespace std;
void aaa_search(int key, int a[], int n);
int main()
{
int i,b, a[100], n;
cout << "请输入数组的长度:";
cin >> n;
cout << "请输入数组:";
for (i = 0, i < n, i++)
cin >> a[i];
cout << "输入你要查找的数字:";
cin >> b;
aaa_search(b, a, n);
}
void aaa_searh(int key, int a[], int n)
{
int low, high, mid;
low = 0;
high = n-1;
while (low<high)
{
mid = (low + high) / 2;
if (key == a[mid])
cout << "key is a[" << mid<<"]="<<a[mid];
else if (key < a[mid])
high = mid - 1;
else if (key > a[mid])
low = mid + 1;
}
}
程序已经修改完成:
#include <iostream>
using namespace std;
void aaa_search(int key, int a[], int n);
int main()
{ int i,b, a[100], n;
cout << "请输入数组的长度:";
cin >> n;
cout << "请输入数组:";
for (i = 0; i < n; i++) //中间两个分号
cin >> a[i];
cout << "输入你要查找的数字:";
cin >> b;
aaa_search(b, a, n);
}
void aaa_search(int key, int a[], int n) //少了一个字母c
{ int low, high, mid;
low = 0;
high = n-1;
while (low<=high)
{ mid = (low + high) / 2;
if (key == a[mid])
{ cout << "key is a[" << mid<<"]="<<a[mid];
return; //找到后不再查找
}
else if (key < a[mid])
high = mid - 1;
else if (key > a[mid])
low = mid + 1;
}
}
追问我还想问下mid是小数的时候 是怎么处理的
low➕high是奇数的时候
追答mid永远是整数,这是由于它是两个整数的商,15/2=7
追问。。。??
追答C语言中,两个 int 的商,仍是一个 int 。
(6+9)/2=7
好吧 是向下取整吗。
追答是向下取整的。
又报错了 这是什么情况
哦 字母少打了一个 谢谢老哥 实现了
追答那采纳吧
追问我还想问一下那个mid是小数的时候 是怎么处理的
low➕high是奇数的时候
追答取整,直接丢掉小数部分。比如当low+high=5时,mid=2,当low+high=9时,mid=4。
本回答被提问者采纳