Description
实现二分查找函数,函数接口如下。
/* size为数组s的实际大小。
假定s非递减有序,如果s中存在值为target的元素,
则返回最后一次出现的位序号,否则返回-1表示不存在。
位序号从0开始计。*/
int binSearch(const int s[], const int size, const int target)
{
// 请将实现代码添加在这里
}
提交时只需提交上述函数,不要提交main()函数。
调用例子:
int s[8] = {0,1,1,3,3,3,6,6};
cout << binSearch(s,8,3) << endl; //输出5
cout << binSearch(s,8,4) << endl; //输出-1
Hint
不允许使用STL库里面的相关函数和库(否则可能会出现编译错误)
包括iostream, map, vector, set, algorithm, queue等
#思路
先找到我们需要查找的值,然后往后找到第一个不等于这个值的下标
#include <iostream>
using namespace std;
int binSearch(const int s[], const int size, const int target)
{
int start = 0;
int end = size - 1;
int mid = (start+end)/2;
while(s[mid] != target&&start <= end) {
if(s[mid] < target) {
start = mid + 1;
mid = (start+end)/2;
}
if(s[mid] > target) {
end = mid -1;
mid = (start+end)/2;
}
}
if(s[mid] != target) {
return -1;
}
int tag = mid;
for(int i = mid; i < size; i++) {
tag = i;
if(s[i] != target) {
break;
}
}
return tag-1;
}
int main() {
int s[8] = {0,1,1,3,3,3,6,6};
cout << binSearch(s,8,3) << endl; //输出5
cout << binSearch(s,8,4) << endl; //输出-1
return 0;
}