#include <iostream>
using namespace std;
int BSearch(int *a, const int x, const int n) //数组名,需要查找的数,数组长度。加const防止在函数中误操作修改数值
{
int low, high, mid; //数组头下标,数组尾下标,所查找数下标
low = 0;
high = n - 1; //数组十个数,下标0~9 如果有 n 个数,下标最大是 n-1
while (low <= high) //只要头尾之间还有差值,就一直循环
{
mid = (low + high) / 2;
if (a[mid] == x) // 如果arr[mid] == x,就说明已经找到,把匹配数的下标返回
{
return mid;
}
else if (a[mid] < x) //如果arr[mid] < x,就说明前面这一半的数值都比x小
{ //把数组头下标往后移,mid+1就是再次搜索范围开头是4+1,也就是从下标5的位置开始搜索
low = mid + 1;
}
else if (a[mid] > x) //如果arr[mid] > x,就说明 x 在前面的这一半的数值范围中,后半部分都要比前半部分大,所以不考虑
{ //把数组尾下标前移移,mid-1就是再次搜索范围开头是4-1,也就是从下标0的位置到下标3搜索
high = mid - 1;
}
}
return -1;
}
int main()
{
int arr[10]{ 0,1,2,3,4,5,6,7,8,9 };
int x = 7; //需要查找的数
int num = BSearch(arr, x, 10);
if (num == 1)
{
cout << "未找到!" << endl;
}
else if (arr[num] == x)
{
cout << "x在数组arr[" << num << "]中" << endl;
}
return 0;
}
数据结构与算法————折半查找
最新推荐文章于 2022-08-10 21:53:06 发布