欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

旋转数组的最小元素(改造二分法)

程序员文章站 2024-03-17 15:52:52
...

问题描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
输入描述
第一行为一个整数n,表示数组的长度第二行输入数组中各元素,输入保证符合题意
输出描述
输出一个数字,表示数组的最小元素
样例输入
5
3 4 5 1 2
样例输出
1
参考代码

#include<stdio.h>
int sort(int a[],int n){
 int begin=0,end=n-1;
 if(a[begin]<a[end])return a[begin];
 while(end-begin>1)
 {
  int mid=begin+((end-begin)>>1);//防止溢出,移位更高效 
  if(a[mid]>=a[begin])
   begin=mid;
  else end=mid;
 }
 return a[end];
}
int main(){
 int n;
 scanf("%d",&n);
 int a[n];
 for(int i=0;i<n;i++)
  scanf("%d",&a[i]);
 printf("%d\n",sort(a,n));
 return 0;
}