转载自http://blog.****.net/h971379154/article/details/48845355
#include <stdio.h> int BinSearch_Recursion(int Array[],int low,int high,int key); //递归方法 int BinSearch_Recursion(int Array[],int len,int key) { //如果传入的数组为空或者数组长度<=0那么就返回-1。防御性编程 if(Array==NULL||len<=0) return -1; return BinSearch_Recursion(Array,0,len-1,key); } int BinSearch_Recursion(int Array[],int low,int high,int key) /*传入参数分别是找到的数组Array,数组起始位置,数组结束位置,要找的数组*/ { if (low<=high) { //int mid = (low+high)/2; int mid = low + (high - low)/2;//为了防止变量溢出 if(key == Array[mid]) return mid; else if(key<Array[mid]) return BinSearch_Recursion(Array,low,mid-1,key); else if(key>Array[mid]) return BinSearch_Recursion(Array,mid+1,high,key); } else return -1; } //非递归方法 int BinSearch(int Array[],int len,int key) /*传入参数分别是数组地址Array,数组长度len,要找的数据key 返回值为key的位置*/ { //防御性编程 if(Array==NULL || len <= 0) return -1; int low=0,high=len-1; int mid; while (low<=high) { //mid = (low+high)/2; mid = low + (high - low)/2;//为了防止变量溢出 if(key==Array[mid]) return mid; if(key<Array[mid]) high=mid-1; if(key>Array[mid]) low=mid+1; } return -1; } int main(void) { int a[6]={0,5,20,30,88.102}; int len = sizeof(a)/sizeof(a[0]); int locate=0,locate_recursion; locate = BinSearch(a,len,88); locate_recursion =BinSearch_Recursion(a,len,20);//根据参数个数选择执行的函数 printf("%d %d\n",locate,locate_recursion); return 0; }