下面请跟着图老师小编一起来了解下C 二分查找 递归与非递归的实现代码,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!
【 tulaoshi.com - 编程语言 】
代码如下:
#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取接住返回值了
} else {
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;
}
}//上述循环结束后不一定就是 startends的 因为有break语句
if(startends){
mid=-1;
}
return mid;
}
来源:http://www.tulaoshi.com/n/20160219/1595961.html
看过《C 二分查找 递归与非递归的实现代码》的人还看了以下文章 更多>>