将一个规模为N的问题分解为k个较小的子问题,这些子问题遵循的处理方式就是互相独立且与原问题相同。
两部分组成:
三个步骤:
递归实现二分查找
#include<iostream>
using namespace std;
//递归实现二分查找
//找到这个值最后一级一级的传递return回来
int BinarySearch(int* arr,int minSub,int maxSub,int num)
{
if (minSub > maxSub)//无解
{
return -1;
}
int mid = (minSub + maxSub) / 2;
if (num == arr[mid])
{
return mid;
}
else if(num < arr[mid])
{
//因为中间数据arr[mid]大于num,所以新的范围从minSub到mid-1
return BinarySearch(arr, minSub, mid - 1, num);
}
else//num > arr[mid]
{
//因为num大于中间数据arr[mid],所以新的范围从mid+1到maxSub
return BinarySearch(arr, mid + 1, maxSub, num);
}
}
int main(void)
{
int arr[] = { 5,7,9,11,17,23,48,55,64 };
//数组-起始位置(数组索引范围)-要查找的值
int index = BinarySearch(arr,0,8,64);
cout << index << endl;
return 0;
}