二分查找

来源:互联网 发布:淘宝怎么享受极速退款 编辑:程序博客网 时间:2024/06/02 04:03

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;  //输出5cout << binSearch(s,8,4) << endl;  //输出-1    return 0;}
原创粉丝点击