//折半查找算法的变种
#include<iostream>
using namespace std;
int minInOrder(int *number,int low,int high){
int result=number[low];
while(low<high){
if(result>number[low])
result=number[low];
low++;
}
return result;
}
int Min(int *number,int length){
if(number==NULL||length<=0){
throw std::exception("数组为空");
}
int low=0;
int high=length-1;
int mid=low;
while(number[low]>=number[high]){
if(high-low==1)
{
mid=high;
break;
}
mid=(low+high)/2;
if(number[low]==number[mid]&&number[mid]==number[high])
return minInOrder(number,low,high);
if(number[mid]>number[low])
low=mid;
if(number[mid]<number[high])
high=mid;
}
return number[mid];
}
void main(){
int num[5]={3,4,5,1,2};
cout<<Min(num,5)<<endl;
int arr[6] = {3, 4, 5, 1, 1, 2};
cout<<Min(arr,6)<<endl;
int arr1[] = {3, 4, 5, 1, 2, 2};
cout<<Min(arr1,6)<<endl;
int arr2[] = {1, 0, 1, 1, 1};
cout<<Min(arr2,5)<<endl;
int arr3[] = {1, 2, 3, 4, 5};
cout<<Min(arr3,5)<<endl;
int arr4[] = {2};
cout<<Min(arr4,1)<<endl;
cout<<Min(NULL,0)<<endl;
}
MinNumberInRotatedArray
最新推荐文章于 2022-05-01 23:10:57 发布