binary_find_c++
二分查找的两种c++实现
1.非递归实现
#include<iostream> using namespace std; int BinaryFind1(int arr[],int left,int right,int val) { int mid; while(left<=right){ mid=l+(r-l)/2;//不会发生溢出 if(val>arr[mid]) left=mid+1;//这样设置比较合理 else if(val<arr[mid]) right=mid-1; else return mid; } return -1;//没找到 }
2.递归实现
1 int binary_search_2(int arr[], int left, int right, int val) 2 { 3 4 if(l > r) return -1; //找不到的情况 5 int mid = left+(right-left)/2; //求中值,这样求可以避免溢出 6 if(arr[mid] == val) return mid; 7 if(arr[mid] > val) right = mid-1; 8 else left = mid+1; 9 return binary_search_2(arr, left, right, val); //递归调用 10 }
两个需要注意的地方
1.mid=left+(right-left)/2
2.对左右进行划分时left=mid+1或right=mid-1较为合理
3.这是我的第一条博客
4.我讨厌不会数数的人:-)