int findMinNumber(int* array, int length) { if(NULL == array || length <= 0) { throw std::exception("invalid input.\n"); } int start = 0; int end = length - 1; int middle = start; while(array[start] >= array[end]) { if(start + 1 == end || start == end) { middle = end; break; } middle = (start + end) / 2; //如果下标start, middle, end所指向的数字相同, 只能采用顺序遍历 if(array[start] == array[end] && array[start] == array[middle]) { return minInOrder(array, start, end); } if(array[middle] >= array[start]) { start = middle; } else { end = middle; } } return array[middle]; }
int min(int *num,int length) { if(num==NULL||length<=0) return -1; int index1=0,index2=length-1; int indexMid=index1; while(num[index1]>=num[index2]) { if(index2-index1 == 1) { indexMid = index2; break; } indexMid=(index1+index2)/2; if(num[indexMid]==num[index1] && num[index1]==num[index2]) return minInOrder(num,index1,index2); if(num[indexMid]>num[index1]) index1=indexMid; else if(num[indexMid]<num[index2]) index2=indexMid; } return num[indexMid]; }