题目
找到一个数组中比给的数大一点的数
int[]arr={1,3,5,9,12,40,70,85,90,99};
分析:运用分治法,从中间切一刀,看看再切的位置满不满足条件,不满足再在左边或者右边搜索
public class _6_分治_01二分查找1 {
public static int F(int[]arr,int begin,int end,int n)
{
if(n<arr[0]) //如果搜索的数比第一个还小 ,返回第一个
return arr[0];
if(n>=arr[end-1]) //比最后一个还大,返回-1 找不到
return -1;
int k = (begin+end)/2; //二分
if(begin-end == 2) //如果搜索的数组只有两个了 看看返回的是第一个还是第二个
{
return arr[0]>n?arr[0]:arr[1];
}
if(arr[k-1]<=n&&arr[k]>n) //如果刚好在二分的位置,返回
return arr[k];
if(arr[k]<=n) //不在二分位置,分别去搜索左边的或右边的
return F(arr,k,end,n);
if(arr[k]>n)
return F(arr,0,k,n);
return 0;
}
public static void main(String[] args) {
int[]arr={1,3,5,9,12,40,70,85,90,99};
for(int i=0;i<101;i++)
System.out.println(i+" "+F(arr,0,arr.length,i));
}
}