二分搜索(binary search)

二分查找实现:

#include <iostream>
#include <vector>

#define NOT_FOUND -1

using namespace std;

template <typename comparable>
int binarySearch(const vector<comparable> & a, const comparable & x)
{
    int low = 0;
    int high = a.size() - 1;

    while(low <= high)
    {
        int mid = (low + high) / 2;

        if(a[mid] < x)
            low = mid +1;
        else if(a[mid] > x)
            high = mid - 1;
        else
            return mid;  //Found
    }
    return NOT_FOUND;    //NOT_FOUNT is defined as -1
}

int main()
{
    int find = 5;
    const size_t arrsize = 10;
    int intarr[arrsize] = {1,2,3,4,5,6,7,8,9,10};
    vector<int> intary ;
    for (int i = 0; i<arrsize; i++)
    {
        intary.push_back(intarr[i]);
    }

    int findOne = binarySearch(intary,find);

    cout << "find: " << find << endl;
    cout << "findOne: " << intarr[findOne] << endl;
    return 0;
}

注:

二分查找只能对已排我序的序列,运行时间是O(logN)

posted @ 2012-05-29 15:21  lmy4710  阅读(80)  评论(0)    收藏  举报