//递归解法 int binary_search1(DataType *arr,int len,DataType value,int(* comp)(DataType,DataType)) { if(len<=0) return 0; if(comp(value,arr[(len-1)/2])) return binary_search1(arr,(len-1)/2,value,comp); if(comp(arr[(len-1)/2],value)) return binary_search1(arr+(len-1)/2+1,len-1-(len-1)/2,value,comp); return 1; }
//递归 int binary_search1(int *p,int low ,int high,int goal) { while(low<=high) { int middle=(low+high)/2; if(p[middle-1] == goal) return middle;//查找到返回下标 else if(goal > p[middle]) return binary_search1(p,middle+1 ,high,goal);//右半区 else return binary_search1(p,low,middle-1,goal);//左半区 } return -1;//没有找到 }
int main() { DataType arr[10]={0,2,4,6,8,10,12,14,16,18}; printf("%d\n",binary_search(arr,10,0,less)); printf("%d\n",binary_search(arr,10,10,less)); printf("%d\n",binary_search(arr,10,16,less)); printf("%d\n",binary_search(arr,10,11,less)); printf("\n"); printf("%d\n",binary_search1(arr,10,0,less)); printf("%d\n",binary_search1(arr,10,10,less)); printf("%d\n",binary_search1(arr,10,16,less)); printf("%d\n",binary_search1(arr,10,11,less)); return 0; }