int Min (int *a,int length) {
if (a == NULL || length <= 0) { //异常判断
return 0;
}
int index1 = 0;
int index2 = length-1;
int indexMid = index1;
while (a[index1] >= a[index2]) {
if (index2 - index1 == 1) { //这里表情已经拿到最小值
indexMid = index2;
break;
}
indexMid = (index1+index2)/2;
//如果出现类似{1,0,1,1,1}或{1,1,1,0,1}的数据无法使用这种判断了,只能用for循环遍历
if (a[index1] == a[index2] && a[index2] == a[indexMid]) {
return MidInOrder(a, index1, index2);
}
if (a[indexMid] >= a[index1]) { //如果中间值大于等于左边第一个元素,说明中间值仍然在左边递增序列中,增大index1范围
index1 = indexMid;
} else if(a[indexMid] <= a[index2]) {//如果中间值小于等于右边最后元素,说明中间值在右边递增序列中,缩小index2范围
index2 = indexMid;
}
}
return a[indexMid];
}
int MidInOrder (int *a,int index1,int index2) {//循环遍历找出最小值
int result = a[index1];
for (int i = index1+1; i<=index2; ++i) {
if (result > a[i]) {
result = a[i];
}
}
return result;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
int a[] = {3,4,5,1,2};
int result = Min(a, 5);
}
return 0;
}