C++ 二分查找,数组找数,无法AC,请指教,修改后依然无法AC
【题目描述】
给定一个已经从小到大排好序的数组,数组内有n个元素。现在,你需要在数组中查找元素x,如果x存在,输出它在数组中的位置(如果数组中有多个x,输出位置最小的一个),如果不存在,输出“no”。
【输入格式】
输入包括多行:
第一行包含一个整数n(1<=n<107);
第二行输入n个整数(每个数不会超过107);
第三行输入一个整数k(1<=k<=1000),表示需要进行k次查找;
接下来输入k行,每行输入一个整数x(每个数不会超过107)
【输出格式】
输出k行,对应每次查找的结果。
【输入样例】
6
1 2 2 2 3 4
3
2
5
3
【输出样例】
2
no
5
输入数据1
输入数据 1
6
1 2 2 2 3 4
3
2
5
3
输出数据 1
4
no
5
#include <bits/stdc++.h>
using namespace std;
int a[10000001], n, t;
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++) // 注意从0开始,因为后面要使用下标访问数组
scanf("%d", &a[i]);
scanf("%d", &t);
int left = 0, right = n - 1;
while (left <= right) // 注意需要使用左右指针的方式进行查找
{
int mid = (left + right) / 2;
if (a[mid] == t)
{
printf("%d", mid);
return 0;
}
else if (a[mid] < t)
left = mid + 1;
else
right = mid - 1;
}
printf("no"); // 如果没有找到,输出no
return 0;
}
你的代码是顺序查找,不是二分查找啊
#include <bits/stdc++.h>
using namespace std;
int a[10000001], n, t;
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++) // 注意从0开始,因为后面要使用下标访问数组
scanf("%d", &a[i]);
scanf("%d", &t);
int left = 0, right = n - 1;
while (left <= right) // 注意需要使用左右指针的方式进行查找
{
int mid = (left + right) / 2;
if (a[mid] == t)
{
printf("%d", mid);
return 0;
}
else if (a[mid] < t)
left = mid + 1;
else
right = mid - 1;
}
printf("no"); // 如果没有找到,输出no
return 0;
}