bool findMin(int a[], int start, int end, int* min) {
if(a == NULL || start > end) {
return false;
}
int minNum = a[start];
for (int i= start+1; i < end; i++) {
if (a[i] <= minNum) {
minNum = a[i];
}
}
*min = minNum;
return true;
}
bool minNum(int a[], int lenA, int *num) {
if(a == NULL || lenA <= 0) {
return false;
}
int sIndex = 0;
int eIndex = lenA - 1;
while (a[sIndex] >= a[eIndex]) {
if( eIndex - sIndex == 1 ) {
*num = a[eIndex];
return true;
}
int mid = sIndex + (eIndex-sIndex)/2;
if(a[sIndex] == a[mid] && a[eIndex] == a[mid]) {
int minRet;
bool flag = findMin(a, sIndex, eIndex, &minRet);
if (flag) {
*num = minRet;
return true;
}
else {
return false;
}
}
if(a[mid] >= a[sIndex]) {
sIndex = mid;
}
else {
eIndex = mid;
}
}
return true;
}
int array3[] = {3, 4, 5, 0, 1, 2};
int minResult;
minNum(array3, 6, &minResult);
https://blog.csdn.net/BlackShao16/article/details/81609679