C 二分查找 递归与非递归的实现代码
C 二分查找 递归与非递归的实现代码
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#includeintbinSearch(intarr[],intlow,inthigh,intkey);intbinSe...

复制代码 代码如下:

#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;

}

}//上述循环结束后不一定就是 start>ends的 因为有break语句

if(start>ends){

mid=-1;

}

return mid;

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类