5️⃣ 折半查找
⭕️非递归
#include <iostream>
#include <vector>
using namespace std;
int Binary (const vector<int> &a, int left, int right, int x){
while (left<=right){
int center = (left + right) / 2;
if (x==a[center]) return center;
else if (x<a[center]) right = center - 1;
else left = center + 1;
}
return -1;
}
int BinarySearch (const vector<int> &a, int x){
return Binary(a,0,a.size()-1,x);
}
int main(){
vector<int> a{1,2,3,4,5,6,7,8};
int x;
cin >> x;
if(BinarySearch(a,x)<0)
cout << x << "不在数组a中!" << endl;
else
cout << x << "是a[" << BinarySearch(a,x) << "]" << endl;
return 0;
}
⭕️递归
#include <iostream>
#include <vector>
using namespace std;
int Binary (const vector<int> &a, int left, int right, int x){
if (left<=right){
int center = (left + right) / 2;
if (x==a[center]) return center;
else if (x<a[center]) return Binary(a, left, center-1, x);
else return Binary(a, center+1, right, x);
}
return -1;
}
int BinarySearch (const vector<int> &a, int x){
return Binary(a,0,a.size()-1,x);
}
int main(){
vector<int> a{1,2,3,4,5,6,7,8};
int x;
cin >> x;
if(BinarySearch(a,x)<0)
cout << x << "不在数组a中!" << endl;
else
cout << x << "是a[" << BinarySearch(a,x) << "]" << endl;
return 0;
}