把文字粘贴过来发现下标会乱掉,就存图了。
对半查找递归实现函数:
int Bsearch(int& x, int left, int right){
if(left <= right){ //若表(子表)非空
int m = (left + right)/2; //对半分割
if(x == arr[m]) return m; //搜索成功
else if(x < arr[m])
return Bsearch(x, left, m-1); //搜索左半子表
else
return Bsearch(x, m+1, right); //搜索右半子表
}
return -1; //表示没查找到
}
注意对半搜索要求数组有序,测试代码:
#include <iostream>
#include <algorithm>
using namespace std;
int arr[6];
int Bsearch(int& x, int left, int right){
if(left <= right){ //若表(子表)非空
int m = (left + right)/2; //对半分割
if(x == arr[m]) return m; //搜索成功
else if(x < arr[m])
return Bsearch(x, left, m-1); //搜索左半子表
else
return Bsearch(x, m+1, right); //搜索右半子表
}
return -1; //表示没查找到
}
//测试
int main(){
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 6;
arr[4] = 10;
arr[5] = 8;
sort(arr, arr+6); //对半查找要求数组有序
int sea;
cout << "输入查找元素:";
cin >> sea;
if(Bsearch(sea, 0, 5) >= 0){
cout << "该元素对应的下表是:" << Bsearch(sea, 0, 5) << endl;
}
else{
cout << "数组中不存在该元素" << endl;
}
return 0;
}