参考链接: http://blog.chinaunix.net/uid-27103408-id-3761907.html
函数使用二分查找搜索一个增序的数组,当有多个元素值与目标元素相等时,返回最左边一个元素的下标,目标元素不存在时返回-1。
代码如下:
#include <iostream>
using namespace std;
int BinarySearch(int arr[],int n,int key){
int l = 0,r = n-1;
while(l < r){
int mid = (l+r)/2;
if(arr[mid] >= key)
r = mid;
else
l = mid+1;
}
if(arr[r] == key)
return r;
else
return -1;
}
int main(){
int arr[] = {2,4,5,6,6,6,7,8,8,10};
cout<<BinarySearch(arr,sizeof(arr)/sizeof(arr[0]),6)<<endl;
return 0;
}
运行结果如下:
函数使用二分查找搜索一个增序的数组,当有多个元素值与目标元素相等时,返回最右边一个元素的下标,目标元素不存在时返回-1。
注意: 找最右时 mid = (left + right + 1) / 2;//保证取到中间靠后的位置
#include <iostream>
#include <vector>
using namespace std;
int BinarySearchMax(const std::vector<int>& data, int target)
{
int left = 0;
int right = data.size()-1;
while (left < right) {
int mid = (left + right + 1) / 2;//保证取到中间靠后的位置
if(data[mid] <= target)
left = mid;
else
right = mid - 1;
}
if (data[left] == target)
return left;
return -1;
}
int main(){
vector<int> data{2,4,5,6,6,6,7,8,8,10};
cout<<BinarySearchMax(data,6)<<endl;
return 0;
}
运行结果如下: