旋轉數組最小值

#include<stdio.h>
//旋轉數組沒有相等的數 [6,7,8,9,1,2,3,4,5]
int Find_min(int array[],int length)
{
  int ptrnode1,ptrnode2,midnode;
  ptrnode1=0;
  ptrnode2=length-1;
  midnode=ptrnode1;
  while(array[ptrnode1]>=array[ptrnode2])
  {
if(ptrnode2-ptrnode1==1)
{
   midnode=ptrnode2;
break;
}
     midnode=(ptrnode1+ptrnode2)>>1;
if(array[ptrnode1]<=array[midnode])
{
   ptrnode1=midnode;
}
else if(array[ptrnode2]>=array[midnode])
{
  ptrnode2=midnode;
}
  
  }
 return array[midnode];
}
//旋轉數組存在相等的數  [1 0 1 1 1],[1 1 1 1 0 1 1]
int Ord(int array[],int p1,int p2)
{
   int i=p1;
   int key=array[p1];
   for(;i<p2;i++)
   {
     if(key>array[i])
key=array[i];
   }
   return key;
}
int Find_min_up(int array[],int length)
{


  int ptrnode1,ptrnode2,midnode;
  ptrnode1=0;
  ptrnode2=length-1;
  midnode=ptrnode1;
  while(array[ptrnode1]>=array[ptrnode2])
  {
if(ptrnode2-ptrnode1==1)
{
   midnode=ptrnode2;
break;
}
 
     midnode=(ptrnode1+ptrnode2)>>1;
if((array[ptrnode1]==array[ptrnode2])&&
array[ptrnode1]==array[midnode])
{
  return Ord(array,ptrnode1,ptrnode2);
}
if(array[ptrnode1]<=array[midnode])
{
   ptrnode1=midnode;
}
else if(array[ptrnode2]>=array[midnode])
{
  ptrnode2=midnode;
}
  
  }
 return array[midnode];
}


void main()
{
int array[]={1,0,1,1,1};
    printf("%d\n",Find_min_up(array,5));


}

//查找旋轉數組中最小值,時間複雜度爲O(log(n))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章