用二分法在一个有序数列{1,2,3,4,5,6,7,8,9,10}中查找key值,若找到key则输出其在数组中对应的下标,否则输出not found。
请帮忙纠错 我输入后结果错误 输入四结果是5
using namespace std;
int search(int* arr, int m, int M, int k) {
while (m < M) {
int mid = (m + M) / 2;
if (arr[mid] = k) {
return mid+1 ;
}
else if (arr[mid] << k) {
m = mid + 1;
}
else {
M = mid - 1;
}
}
cout << "not found";
return -1;
}
int main(){
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
int k;
cin >> k;
cout<<search(a, 0, 9, k);
system("pause");
return 0;
}
参见如下:
#include <iostream>
#include <math.h>
using namespace std;
int search(int* arr, int m, int M, int k)
{
int max = M;
int min = m;
int flag = 0; // 默认标识为0,表示未找到
while (min <= max)
{
int mid = round((max + min) / 2.0);
if (arr[mid] <= k)
{
min = mid + 1;
}
else if (arr[mid] > k)
{
max = mid - 1;
}
if (arr[mid] == k)
{
flag = 1; // 找到了,标识设为1
}
}
// 没有找到
if (flag == 0)
max = -1; // -1 表示未找到
return max;
}
int main(){
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
int k;
cin >> k;
int result = search(a, 0, 9, k);
if (result == -1)
{
cout<< "not found";
}
else
{
cout<< result;
}
system("pause");
return 0;
}
如有帮助,欢迎采纳哈!