原理简介:对半搜索是一种二分搜索,设当前搜索的子表为 ,令m=(left+right)/2 ,这种二分搜索被称为对半搜索;对半搜索算法是将数据表划分成几乎相等大小的两个子表。
下面是对半算法的递归算法代码,其中x是待查元素,left、right是搜索范围,(m、left、right)是元素下标。
对半查找递归实现函数:
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;
}
另外本人还开设了个人公众号:JiandaoStudio ,会在公众号内定期发布行业信息,以及各类免费代码、书籍、大师课程资源。
扫码关注本人微信公众号,有惊喜奥!公众号每天定时发送精致文章!回复关键词可获得海量各类编程开发学习资料!
例如:想获得Python入门至精通学习资料,请回复关键词Python即可。