二分查找问题

二分查找代码要注意:
1.循环判断条件应该是:low<=high,否则在key值刚好等于某一次循环的high或者low时无法执行.
2.middle=low+(high-low)/2; 防止溢出
3.根据问题要求选择边界值的改变方式:
因为循环条件,最后会出现low和high在key的两边,且有关系low=high+1.
假设有多个相等key值的有序数组.
当 array[middle]==key
如果high=middle-1,最终high会落在第一个key值的左边
如果low=middle+1,最终low会落在最后一个key值的右边
4.确定最后应该返回low还是high
①有多个相等元素
返回第一个key,return low;
返回最后一个key,return high;

返回第一个小于key的元素 return high;
返回第一个大于key的元素 return low;

返回第一个小于等于key的元素 return low;
返回第一个大于等于key的元素 return high;

posted @ 2019-01-19 11:41  少年留不住  阅读(177)  评论(0)    收藏  举报