一组有序数(从小到大排列),有负有正,找出绝对值最小值
#include <stdio.h>
#include <vector>
using namespace std;
static int GetMin(const vector<int> &data, int begin, int end){
//循环到只剩下两个相邻数字,或者整个序列都是相同符号
if(end - begin == 1 || data[begin] * data[end] >= 0){
return abs(data[end]) > abs(data[begin]) ? data[begin] : data[end];
}
int k = (begin + end) / 2;
//对异号的序列查找
if(data[begin] * data[k] > 0){
return GetMin(data, k, end);
}
return GetMin(data, begin, k);
}
int FindAbsMin(const vector<int> &data){
int m = GetMin(data, 0, data.size() - 1);
printf("%d", m);
return m;
}
int main(){
vector<int> data;
int Num[] = {-4,-3,-2,-1};
for(int i = 0; i < sizeof(Num) / sizeof(Num[0]); ++i){
data.push_back(Num[i]);
}
FindAbsMin(data);
return 0;
}