用递归来实现
分 递归解决较小的问题,
治 然后从子问题的解 构建原问题的解 把大问题分成小问题最后小问题的解就是大问题的解
三个步骤
1,分解 将原问题分解为诺干个规模较小,相互独立,与原问题形式相同的子问题。
2.解决 若子问题规模较小(像一对一的时候)容易被解决则直接解决,否则递归解决各个子问题
3合并 将各个子问题的解合并为原问题的解。(问题的解只有一个。最终把这个问题的解返回就可以)
二分查找 对折然后比较中间的数,然后在对折
//
// main.cpp
// 分治
//
// Created by 言清欢 on 2022/3/5.
//
#include <iostream>
#include <stdlib.h>
/*递归实现二分查找
参数:arr -有序数组地址arr
minSub - 查找范围的最小下标minSub
maxSub - 查找范围最大的下标
num - 待查找数字
*/
//最小的下标是下标不是内容
intBinarySearch(int*arr,intminSub,intmaxSub,intnum){
if(minSub>maxSub){
return -1;//找不到num时,直接返回,出现这种情况时传递问题
}
intmid=(minSub + maxSub)/2;//对折
if(num == arr[mid]){
returnmid;//找到num时直接返回
}elseif(num<arr[mid]){
returnBinarySearch(arr, minSub, mid-1, num);
}else{
//num> arr[mid]
returnBinarySearch(arr, mid+1, maxSub, num);
}
}
intmain(intargc, constchar* argv[]) {
intgirls[]={5,7,15,19,23,26,27,28,30};
intindex = BinarySearch(girls,0,9,5);
std::cout<<index<<std::endl;
std::cout << "Hello, World!\n";
return0;