查找 - 二分查找

来源:互联网 发布:windows刻录光盘 编辑:程序博客网 时间:2024/06/07 03:25

二分查找是利用分治思想减小问题规模的一种查找算法,二分查找的序列必须是有序的。
c/c++实现的算法如下:

/*递归算法, bsearch_recursion.c*/int bsearch_recursion(int array[], int low, int high, int key){    int mid_index, mid_value;    mid_index = low + (high - low) / 2;    mid_value = array[mid_index];    if (low < high && key != mid_value) {        if (key > mid_value) return bsearch_recursion(array, mid_index + 1, high, key);             if (key < mid_value) return bsearch_recursion(array, low, mid_index - 1, key);    } else if (key == mid_value)        return mid_index;    else         return -1;}/*循环算法, bsearch_loop.c*/int bsearch_loop(int *array, int low, int high, int key){    int mid_index = low + (high - low) / 2;    int mid_value = *(array + mid_index);    while (low < high && key != mid_value) {        if (key > mid_value)            low = mid_index + 1;        if (key < mid_value)            high = mid_index - 1;        mid_index = low + (high - low) / 2;        mid_value = *(array + mid_index);    }    return (*(array + mid_index) == key ? mid_index : -1);}//bsearch.cppbool bsearch(std::vector<int>ivec, int target) {     auto begin = ivec.begin(), end = ivec.end(),      mid = begin + (end - begin) / 2;     while (begin != end && *mid != target) {         if (*mid > target)             end = mid - 1;         else             begin = mid + 1;         mid = begin + (end - begin) / 2;     }        return *mid == target; }
0 0
原创粉丝点击