//二分查找,遞歸
bool Search::bSearch(int *data, int startId, int endId, int value){
int middleId = (endId + startId)/2;
if(startId == endId){
if( data[startId] == value){
valueId = startId;
return true;
}else{
return false;
}
}
if(data[middleId] == value){
valueId = middleId;
return true;
}else if(data[middleId] >value){
return bSearch(data, startId, middleId-1, value);
} else{
return bSearch(data, middleId+1, endId, value);
}
}
//二分查找,非遞歸
int Search::binarySearchW(int * data, int len, int value){
if( data == NULL || len <= 0){
return ERROR;
}
int startId = 0;
int endId = len - 1;
while(startId <= endId){
int midId = (endId - startId)/2 + startId;//(endId + startId)/2 //防止溢出
if(data[midId] == value){
return midId;
}
else if(value < data[midId]){
endId = midId -1;
}
else {// value > data[midId]
startId = midId + 1;
}
}
return ERROR;
}
//查找數組中第二大元素
int Search::find2ndData(int * data, int len){
if(data == NULL || len < 2){
return ERROR;
}
int secondVal = INT32_MIN;
int maxVal = INT32_MIN;
for(int i = 0; i < len; i ++){
if(data[i] > maxVal){
secondVal = maxVal;
maxVal = data[i];
}
else{
if(data[i] > secondVal){
secondVal = data[i];
}
}
}
return secondVal;
}