//写法<一>
#include <iostream>
using namespace std;
int nums[10]={1,3,3,3,4};
int binarySearch1(int nums[],int target){//搜索区间[left,right] 寻找一个数
int left=0;
int right=4;//注意
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target)return mid;
else if(nums[mid]<target)left=mid+1;
else if(nums[mid]>target)right=mid-1;
}
return -1;//注意
}
int binarySearch2(int nums[],int target){//搜索区间[left,right) 寻找左侧边界
int left=0;
int right=5;//注意
while(left<right){
int mid=left+(right-left)/2;
if(nums[mid]==target)right=mid;
else if(nums[mid]<target)left=mid+1;
else if(nums[mid]>target)right=mid;
}
return left;//注意
}
int binarySearch3(int nums[],int target){//搜索区间[left,right) 寻找右侧边界
int left=0;
int right=5;//注意
while(left<right){
int mid=left+(right-left)/2;
if(nums[mid]==target)left=mid+1;
else if(nums[mid]<target)left=mid+1;
else if(nums[mid]>target)right=mid;
}
return left-1;//注意
}
int main(int argc, char *argv[])
{
cout<<binarySearch1(nums,3)<<endl;
cout<<binarySearch2(nums,3)<<endl;
cout<<binarySearch3(nums,3)<<endl;
return 0;
}
//写法<二>
#include <iostream>
using namespace std;
int nums[10]={1,3,3,3,4};
int binarySearch1(int nums[],int target){//搜索区间[left,right] 寻找一个数
int left=0;
int right=4;//注意 length-1
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target)return mid;//注意
else if(nums[mid]<target)left=mid+1;
else if(nums[mid]>target)right=mid-1;
}
return -1;
}
int binarySearch2(int nums[],int target){//搜索区间[left,right) 寻找左侧边界
int left=0;
int right=4;//注意 length-1
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target)right=mid-1;//注意
else if(nums[mid]<target)left=mid+1;
else if(nums[mid]>target)right=mid-1;
}
if(left>=4||nums[left]!=target)//检查left越界情况
return -1;
return left;
}
int binarySearch3(int nums[],int target){//搜索区间[left,right) 寻找右侧边界
int left=0;
int right=4;//注意 length-1
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target)left=mid+1;//注意
else if(nums[mid]<target)left=mid+1;
else if(nums[mid]>target)right=mid-1;
}
if(right<0||nums[right]!=target)//检查right越界情况
return -1;
return right;
}
int main(int argc, char *argv[])
{
cout<<binarySearch1(nums,3)<<endl;
cout<<binarySearch2(nums,3)<<endl;
cout<<binarySearch3(nums,3)<<endl;
return 0;
}