查找 - 二分查找
2015-04-02 15:53
239 查看
二分查找是利用分治思想减小问题规模的一种查找算法,二分查找的序列必须是有序的。
c/c++实现的算法如下:
c/c++实现的算法如下:
[code]/*递归算法, 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.cpp bool 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; }
相关文章推荐
- 【剑指offer】二分查找二维数组
- 有序 循环数组的二分查找
- BinarySearch 二分查找
- 第三周作业——顺序查找和二分查找
- leetcode_33题——Search in Rotated Sorted Array(二分查找)
- Leetcode 35 Search Insert Position 二分查找(二分下标)
- 二分查找
- 二分查找
- 【CODE[VS]】1230 元素查找 二分
- 二分查找与斐波那契数递归与非递归的时间复杂度与空间复杂度
- 二分查找----递归实现
- 数据结构实验之查找四:二分查找
- 快速排序和二分查找的练习
- 顺序查找与二分查找
- Python编写数据结构中的二分查找
- 二分查找终极版
- 1471 - Defense Lines(二分查找)
- 二分查找
- 体会大师们的智慧-折半查找二分查找)
- 二分查找实现