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

合并排序(C语言实现)

二叉树遍历 非递归 C++实现代码

C++读写Excel的实现方法详解

解析shell排序的实现代码

判断给定的图是不是有向无环图实例代码

c++ 巧开平方的实现代码

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

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

用C++实现队列的程序代码

C语言小程序 计算第二天日期示例代码

精品推荐
分类导航