准备阿里面试,整理了一下二分查找的递归与非递归实现方式,面试挺常见的。代码如下:
//二分查找的非递归实现 int binary_search(int array[],int n,int value) { int left=0; int right=n-1; while(left<=right) { int middle=left+(right-left)/2; if(array[middle]>value) right=middle-1; else if(array[middle]<value) left=middle+1; else return middle; } return -1; } //二分查找的递归实现 int binary_search(int array[],int left,int right,int value) { if(right<left) return -1; int middle=left+(right-left)/2; if(array[middle]==value) return middle; else if(array[middle]>value) return binary_search(array,left,middle-1,value); else return binary_search(array,middle+1,right,value); return -1; }
//二叉排序树查找非递归实现 bool BSTreeSearch(BinarySearchTree t,int value) { if(t==NULL) return false; while(t!=NULL) { if(t->m_nKey==value) return true; else if(t->m_nKey>value) t=t->m_pLeft; else t=t->m_pRight; } return false; } //二叉排序树查找递归实现 bool BSTreeSerarch(BinarySearchTree t,int value) { if(t==NULL) return false; if(t!=NULL) { if(t->m_nKey==value) return true; else if(t->m_nKey>value) return BSTreeSearch(t->m_pLeft,value); else return BSTreeSearch(t->m_pRight,value); } return false; }