ACM:二分查找,以及利用二分法来找上下界
2014-07-01 23:22
281 查看
(一)二分的模版:
(二)
(三)利用二分法找上下界
int binary_search(int *array, int length, int key) { int start = 0, end = length - 1; while(end >= start) { int middle = start + (end - start) / 2; int tmp = array[middle]; if(tmp < key) start = middle + 1; else if (tmp > key) end = middle - 1; else return middle; } return -1; }
(二)
#include<stdio.h> #include<assert.h> int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; int bsearch(int* A, int x, int y, int v) { int m; while(x < y) { m = x+(y-x)/2; if(A[m] == v) return m; else if(A[m] > v) y = m; else x = m+1; } return -1; } int main() { int i; for(i = 1; i <= 11; i++) assert(bsearch(A, 0, 11, i) == i-1); printf("Ok!\n"); return 0; }
(三)利用二分法找上下界
#include<stdio.h> #include<assert.h> #include <iostream> using namespace std; int A[] = {1, 2, 3, 3, 3, 3, 3, 5, 6}; int lower_bound(int *array, int length, int v) { int start = 0, end = length - 1; while(start <= end) { int middle = start + (end - start) / 2; int tmp = array[middle]; if(array[middle] >= v) end = middle - 1; else start = middle + 1; } return start; } int upper_bound(int *array, int length, int v) { int start = 0, end = length-1; while(start <= end) { int middle = start + (end - start) / 2; int tmp = array[middle]; if(array[middle] <= v) start = middle + 1; else end = middle - 1; } return start; } int main() { cout << lower_bound(A, 9, 3) << endl << upper_bound(A, 9, 3) << endl; return 0; }
相关文章推荐
- (转载)如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 二分法的应用----------利用随机类生成数组,并用二分法对数组的元素进行查找以及插入操作
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- DP之最长递增序列(利用二分查找,复杂度为nlgn)
- 利用二分查找在循环递增数组中检索一个元素
- 利用二分查找在循环递增数组中检索一个元素
- 判断一个数组是否已经排好序以及二分查找
- 关于上下界的二分查找
- 二分查找求上、下界
- W. :利用合并排序和二分查找实现习题2.3-7
- uva10391 单词复合 利用二分查找求解
- 利用快速排序和二分查找数字出现次数
- 二分查找求下界
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
- [整理]插入排序以及二分查找排序