如题,在旋转数组中查找指定元素,考虑到多种情况,网上的方法大部分没有考虑,当low,high,mid三个值相等时的情况。
代码如下:
int findAll(int A[],int low,int high,int value)//当三个相等时,查找全部元素的函数。
{
for(int i = low;i < high;i++)
{
if(A[i]==value)
return i;
}
return -1;
}
int find(int A[],int n,int value)//查找旋转数组指定元素的函数
{
int low=0;
int high=n-1;
int mid;
while(low<=high)
{
mid=low+(high-low)/2;
if(A[mid]==value)
return mid;
if(A[low]==A[mid]&&A[mid] == A[high])//三者相等时,完全遍历查找
{
return findAll(A,low,high,value);
}
if(A[low]<=A[mid])//左边有序
{
if(A[mid]>value&&value>=A[low])
{
high=mid-1;
}else{
low=mid+1;
}
}else if(A[mid]<=A[high])//右边有序
{
if(A[mid]<value&&A[high]>=value)
{
low=mid+1;
}else{
high=low-1;
}
}
}
return -1;
}
时间: 2024-10-06 01:39:48