牛克编程-二分查找

来源:互联网 发布:淘宝账号及密码免费送 编辑:程序博客网 时间:2024/04/30 14:14

题目描述
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1

#include<iostream>#include<vector>#include<algorithm>using namespace std;class BinarySearch {public:    int getPos(vector<int> A, int n, int val)    {        // write code here        vector<int> tmp;        int low = 0, high = n - 1, mid = 0;        while (low <= high)        {            mid = (low + high) / 2;            if (A[mid] == val)            {                tmp.push_back(mid);                high = mid;                high--;            }            else if (A[mid] > val)                high = mid - 1;            else if (A[mid] < val)                low = mid + 1;        }        if (!tmp.empty())        {            sort(tmp.begin(), tmp.end());            return tmp[0];        }        else        return -1;    }};int main(void){    vector<int>a;    int n, m;    cin >> n >> m;    int temp = m;    while (n--)    {        int tmp;        cin >> tmp;        a.push_back(tmp);    }    BinarySearch *x = new BinarySearch;    cout<<x->getPos(a, temp, m);    system("pause");    return 0;}
原创粉丝点击