二分查找函数

Eleanor ·
更新时间:2024-11-14
· 624 次阅读

第一种情形

写一个函数BinarySeach,在包含size个元素的、从小到大排序int数组a里查找元素p。如果找到,则返回元素下标;如果找不到,则返回-1。

复杂度为O(log(n))

int BinarySearch(int a[], int size, int p) { int L = 0; //查找区间的左端点 int R = size - 1; //查找区间的右端点 while (L a[mid]) L = mid + 1; //设置新的查找区间的左端点 else R = mid - 1; //设置新的查找区间的右端点 } return -1; } 第二种情形

写一个函数LowerBound,在包含size个元素的、从小到大排序int数组a里查比给定整数p小的、下标最大的元素。 如果找到,则返回元素下标;如果找不到,则返回-1。
复杂度为O(log(n))

int LowerBound(int a[], int size, int p) { int L = 0; //查找区间的左端点 int R = size; // 查找区间的右端点 int LastPos = -1; //到目前为止找到的最优解 while (L = p) R = mid - 1; else { LastPos = mid; L = mid + 1; } } return LastPos; }

注意:
在取查找区间正中元素的下标的过程中:

int mid = (L+R)/2;//不建议采用这个方法 int mid = L+(R-L)/2;//为了防止(L+R)过大溢出
作者:20010211



函数 二分 二分查找

需要 登录 后方可回复, 如果你还没有账号请 注册新账号