文章目录

//找出旋转有sheng序数组的最小值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
using namespace std;
int inorder(int *a,int n){
if(a==NULL||n<=0)
throw exception();
int temp=a[0];
for(int i=1;i<n;i++){
if(a[i]<temp)
temp=a[i];
}
return temp;
}
int Minelement(int *a,int n){
int start=0;
int endt=n-1;
int mid=start;//如果这个数字就是有序的 1 2 3 4
if(a==NULL||n<=0)
return 0;
while(a[start]>=a[endt]){

if(start==endt-1){//找到最小值
mid=endt;
break;
}
mid=(start+endt)/2;
if(a[endt]==a[start]&&a[mid]==a[start])
return inorder(a,n);//这里 必须再添加一个一个return,要不然就不会执行
if(a[mid]<=a[endt])
endt=mid;
else if(a[mid]>=a[start]){
start=mid;
}
}
return a[mid];

}
int main(){
//测试用例:本身有序{1,2,3,4,5,6},a[mid]=a[start]=a[endt];还有正常情况下的

int a[6]={0,1,1,1,1,1};
cout<<Minelement(a,6)<<endl;
return 0;
}

文章目录