可以帮忙看一下哪里错了吗
#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>
using namespace std;
int Bsearch(int arr[],int key){
int low = 0;
int high = 10;
int mid = (low + high) / 2;
while (low<=high)
{
if (key == arr)
return mid;
else if (key < arr)
high = mid - 1;
else
low = mid + 1;
}
// cout << "数组没有该元素" << endl;
return -1;
}
int main(){
int arr;
int key = -1;
cout << "输入一组有序数字(个数为11)" << endl;
for (int i = 0; i < 11; i++)
{
cin >> arr;
}
cout << "输入你想要找的元素:" << endl;
cin >> key;
cout << Bsearch(arr,key) << endl;
system("pause");
return 0;
} 运行的时候,输入想查找的数字 按回车不动 二分查找的代码 看看第9行,想想二分查找的逻辑,再和下面的循环结合起来分析一下,能不能找到问题? dolly_yos2 发表于 2022-10-28 10:32
看看第9行,想想二分查找的逻辑,再和下面的循环结合起来分析一下,能不能找到问题?
找到了!!感谢 本帖最后由 jackz007 于 2022-10-28 10:56 编辑
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include <stdlib.h>
using namespace std ;
void sort(int d[] , int n)
{
int i , j , t ;
for(i = 0 ; i < n - 1 ; i ++) {
for(j = i + 1 ; j < n ; j ++) {
if(d > d) {
t = d ;
d = d ;
d = t ;
}
}
}
}
int Bsearch(int arr[] , int key)
{
int low = 0 ;
int high = 10 ;
int mid = (low + high) / 2 ;
while (low <= high)
{
mid = (low + high) / 2 ; // 少了这一句
if (key == arr) return mid ;
else if (key < arr) high = mid - 1 ;
else low = mid + 1 ;
}
return -1 ;
}
int main()
{
int arr ;
int key = -1 ;
int result ;
cout << "输入一组有序数字(个数为11)" << endl ;
for (int i = 0 ; i < 11 ; i ++) cin >> arr ;
cout << "输入你想要找的元素: " << endl ;
cin >> key ;
cout << "要找的元素是 : " << key << endl ;
sort(arr , 11) ;
result = Bsearch(arr , key) ;
if(result >= 0) cout << Bsearch(arr , key) << endl ;
else cout << "没有找到!" << endl ;
system("pause") ;
}
页:
[1]