题目:把若干个元素搬到数组的末尾,我们称之为旋转数组。查找旋转数组中的最小数
例如:{7,8,9,1,2,3,4,5,6}这是一个旋转数组,最小数为1 {1,2,3,4,5,6,7,8,9}
分析:如果遍历一遍事件复杂度为O(N),可以选择采用二分查找的方式来查找O(logN)的时间复杂度。
#include <stdio.h>
int TheArray(int *a,int len)
{
int front,rear,mid;
front=0;
rear=len-1;
while(a[front]>=a[rear])
{
if(rear-front==1)
{
mid=rear;
break;
}
mid=(front+rear)/2;
if(a[mid]>=a[front])
{
front=mid;
}else if(a[mid]<=a[rear])
{
rear=mid;
}
}
return a[mid];
}
int main()
{
int a[]={4,5,6,7,8,9,1,2,3};
int len=sizeof(a)/sizeof(a[0]);
int ret=TheArray(a,len);
printf("%d\n",ret);
}