码迷,mamicode.com
首页 > 编程语言 > 详细

旋转数组中查找指定元素

时间:2015-06-14 16:44:06      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:旋转

如题,在旋转数组中查找指定元素,考虑到多种情况,网上的方法大部分没有考虑,当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;
}

旋转数组中查找指定元素

标签:旋转

原文地址:http://blog.csdn.net/leosha/article/details/46491821

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!