二分法递归:
有两种情况:
(1)A[mid]<A[end]如7890123456
(2)A[mid]>=A[end]如3456789012
根据target和mid,begin,end的大小关系,去二分原数组
public class Solution {
public static int search(int[] A, int target) {return msearch(A,target,0,A.length-1);
}
public static int msearch(int[] A, int target, int begin, int end) {
int p,mid;
int n=end-begin+1;
if(n==0)
return -1;
if(n==1)
{
if(A[begin]==target)
return begin;
else
return -1;
}
mid=begin+n/2;
if(A[mid]>A[end])
{
if((target>=A[begin])&&(target<=A[mid]))
return msearch(A,target,begin,mid);
else
return msearch(A,target,mid+1,end);
}
else
{
if((target>=A[mid])&&(target<=A[end]))
return msearch(A,target,mid,end);
else
return msearch(A,target,begin,mid-1);
}
}
}