折半查找法
折半查找法
折半查找法,一种基于分治思想的查找算法,对于一串按照从小到大或从大到小顺序排列的数字,折半查找法最坏的时间复杂度为O(logn)。竞赛题中考察的折半,往往需要自行确定边界值。而边界值的确定往往需要借助复杂的数学公式,或者需要手动编写模拟代码确定大致的边界值,随后再通过折半查找法求解。
递归折半
查看代码#include
using namespace std; int a[10001], key; void search(int l, int r) { int mid; if (r>=l) { mid = (r+l)/2; if (key==a[mid]) { printf("%d", mid); return ; } else if (key
非递归折半
查看代码#include
using namespace std; int n, a[10001], key; void search() { int l = 1, r = n; while (l<=r) { int mid = (l+r)/2; if (key==a[mid]) { printf("%d", mid); return ; } else if (keya[n]) puts("-1"); else search(); return 0; }