这个c➕➕ 二分查找有什么问题

#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

追问

好吧 是向下取整吗。

追答

是向下取整的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-11
1.
for(i=0,i<n,i++)改成 for(i=0;i<n;i++)

2.
确保输入一个升序排列的数组,因为你查找前未对数组排序,且你的二分查找算法假定数组是升序排列的。

3.
if (key == a[mid])
cout << "key is a[" << mid<<"]="<<a[mid];
改成
if (key == a[mid])
{
cout << "key is a[" << mid<<"]="<<a[mid];
break;
}追问

又报错了 这是什么情况

哦 字母少打了一个 谢谢老哥 实现了

追答

那采纳吧

追问

我还想问一下那个mid是小数的时候 是怎么处理的

low➕high是奇数的时候

追答

取整,直接丢掉小数部分。比如当low+high=5时,mid=2,当low+high=9时,mid=4。

本回答被提问者采纳
第2个回答  2019-10-11
for (i = 0;i < n; i++) 这里的逗号都改成分号

cin >> a[i];
相似回答