一、二分查找法
template<template T>
int bimarySearch(T arr[], int n, T target){
int l=0,r=n-1; //在[l...r]的范围里寻找target
while(l<=r){ //当l==r是区间是有效的
int mid=(l+r)/2;
if(arr[mid]==target){
return mid;
}
if(arr[mid]>target){
r=mid-1; //target在[l...mid-1]中
}else{ //target<arr[mid]
l=mid+1; //target在[mid+1...r]中
}
}
return -1;
}
二、改变变量定义依然可以写出正确的代码
template<template T>
int bimarySearch(T arr[], int n, T target){
int l=0,r=n; //在[l...r)的范围里寻找target
while(l<r){ //当l==r时,区间[l...r]依然是无效的
int mid=l+(r-l)/2; //防止溢出
if(arr[mid]==target){
return mid;
}
if(arr[mid]>target){
r=mid; //target在[l...mid]中
}else{
l=mid+1; //target在[mid+1...r)中
}
}
return -1;
}
注意两者的区别!!!