二分查找的两种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.我讨厌不会数数的人:-)