半分查找法是在有序数组中查找效率很高的方法。
半分方法有俩种,各有优缺点。
int _find(int x)
{int l=-1,r=_end;while(r-l>1){int mid = (l+r)/2;if(arr[mid]>=x) r = mid;else l=mid;}return r;
}
此方法是左开右闭,查找的所有相等的会放在右边,
最后返回与查找数相等的元素下标最小的那个。
如果查找的数比数组中所有数都大
会返回 数组最大下标+1;
但是如果比所有数都小,那么会返回最小下标,需要
重新比较arr[0]与x大小。
int _find(int x)
{int l=-1,r=_end;while(r-l>1){int mid = (l+r)/2;if(arr[mid]<=x) l = mid;else r=mid;}return l;
}
这种是左闭右开,所有与查找值相等的都会出现在左边,最后返回下表最大的元素。
如果数比数组中所有数都大,会返回最大下标,需要重新判断arr[n]与x大小。
如果查找数比所有数都小,那么会返回-1。
本文发布于:2024-01-27 20:07:38,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063572532365.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |