通过递归快速查询指定的值
使用快查 基本都需要先将数组排序在查,不然话有些是查不出来的
template <typename T>
int BinarySearch2(T &arr[], T key, int low, int high)
{
// 设置 m_high 以存储数组高度
int m_high = high;
// 如果 high 等于数组大小,则 m_high 减一
if(high = ArraySize(arr)) m_high = high - 1;
// 如果 key 小于 arr[low] 或 key 大于 arr[m_high] 或 low 大于 m_high,返回 -1
if(key < arr[low] || key > arr[m_high] || low > m_high)
return -1;
// 计算 mid,即数组的中间位置
int mid = low+(m_high-low)/2;
// 如果 arr[mid] 等于 key,返回 mid
if(arr[mid] == key)
{
return mid;
}
// 如果 arr[mid] 大于 key,在 low 和 mid-1 之间递归查找
if(arr[mid] > key)
{
return BinarySearch2(arr, key, low, mid-1);
}
// 如果 arr[mid] 小于 key,在 mid+1 和 m_high 之间递归查找
if(arr[mid] < key)
{
return BinarySearch2(arr, key, mid+1, m_high);
}
// 其他情况,返回 -1
return -1;
}
调用
void OnStart()
{
int arr[] = {12,5,3,4,8,6,7,9,10};
printf("查询结果: %d",BinarySearch2(arr,0,0,ArraySize(arr)));
}
前台输出结果
2023.01.05 20:18:18.032 查询算法测试 (XAUUSD,H1) 查询结果: 8