手机
当前位置:查字典教程网 >编程开发 >C语言 >C 二分查找 递归与非递归的实现代码
C 二分查找 递归与非递归的实现代码
摘要:复制代码代码如下:#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 二分查找 递归与非递归的实现代码】相关文章:

基于一致性hash算法 C++语言的实现详解

c++ 连接两个字符串实现代码 实现类似strcat功能

8皇后问题的解法实例代码

C++中给二维指针分配内存(实现代码)

C++中一维数组与指针的关系详细总结

C语言中函数与指针的应用总结

如何通过函数指针调用函数(实现代码)

深入分析C++中执行多个exe文件方法的批处理代码介绍

c++ const引用与非const引用介绍

基于一个简单定长内存池的实现方法详解

精品推荐
分类导航