#include <stdio.h>
int binSearch(int arr[], int low, int high, int key);
int binSearch2(int arr[], int low, int high, int key);
int binSearch3(int arr[],int start,int ends,int key);
int main() {
int arr[]={3,8,11,15,17,22,23,26,28,29,34};
//printf("%d",binSearch(arr,0,10,26));
printf("%d",binSearch3(arr,0,10,26));
神经介入
return 1;
}
int binSearch(int arr[], int low, int high, int key) {
int flag=-1;
int mid = (low + high) / 2;
if (low > high) {
flag= -1;
} else {
if (arr[mid] < key) {
flag= binSearch(arr, mid + 1, high, key);
} else if (arr[mid]>key) {
//⽐如要的节点在下⾯这⼀层那么这⼀层会返回下标上来⽤flag接住嘛... flag= binSearch(arr,low,mid-1,key);//⼜差⼀点忘记了⽤flag取接住返回值了
flag= mid;
}
}
return flag;
}
//ok==============================
int binSearch2(int arr[], int low, int high, int key) {
int mid = (low + high) / 2;
大明混一图if (low > high) {聚二甲基硅氧烷
return -1;
} else {
if (arr[mid] < key) {
return binSearch2(arr, mid + 1, high, key);
} else if (arr[mid]>key) {
return binSearch2(arr,low,mid-1,key);
} else {
return mid;
}
}
}
int binSearch3(int arr[],int start,int ends,int key){
int mid=-1;
while(start<=ends){
多巴胺受体激动剂
mid=(start+ends)/2;
if(arr[mid]<key){
start=mid+1;
}else if(arr[mid]>key){
雅虎天盾
ends=mid-1;
}else{
break;
}
}//上述循环结束后不⼀定就是 start>ends的因为有break语句 if(start>ends){
mid=-1;
}
return mid;
}