一个组数整体上是有序的(或者说是循环有序),需要找到其中的某个元素
假设数组整体是升序的,基于二分查找算法实现如下:
非递归实现(C语言)
int search(int a[],int length,int target)
{
int low = 0;
int high = length-1;
while(low <= high)
{
int mid=low + (high - low)/2
if(a[mid] == target)
{
return mid;
}
else if(a[mid+1] <= a[high])
{
if(a[mid+1] < target < a[high])
{
low = mid + 1
}
else if(a[mid+1] == target)
{
return mid + 1;
}
else if(a[high] == target)
{
} return high;
else
{
high = mid -1;
}
}
else if(a[mid-1] >= a[low])
{
if(a[mid-1] > target > a[low])
{
high = mid - 1
}
else if(a[mid-1] == target)
{
return mid - 1;
}
else if(a[low] == target)
{
return low;
}
else
{
low = mid +1;
}
}
}
return -1;
}
递归实现(C语言)
int search(int a[],int low,int high,int target)
{
if(low > high) return -1;
int mid= low + (high - low)/2;
if(a[mid] == target)
{
return mid;
}
else if(a[mid+1] <= a[high])
{
if(a[mid+1] == target)
{
return mid +1;
}
else if(a[high] == target)
{
return high;
}
else if(a[mid+1] < target < a[high])
{
return search(a,mid+1,high,target)
}
}
else if(a[mid-1] >= a[low])
{
if(a[mid-1] == target)
{
return mid -1;
}
else if(a[low] == target)
{
return low;
}
else if(a[low] < target < a[mid-1])
{
return search(a,low,mid-1,target)
}
}
}