二分查找

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;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36124194/article/details/78884985
文章标签: 二分查找 binary
个人分类: c++ 算法 数据结构
想对作者说点什么? 我来说一句

VB 二分查找

2010年06月07日 39KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭