<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
用于二分查找时,求中间值可以用。
例如:
mid = star + ( (end-star)) >> 1);//防止溢出
二分查找的思想:二分查找也叫折半查找,是在一组有序数组中查找某一特定元素的搜索算法。
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果查找的元素大于或者小于中间元素,则在大于或小于中间元素的那一半数组元素中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
实现细节:
定义两个下标,开始下标: star 和结束下表 end ,
star = 0; end = arr.length -1;
开始循环判断中间位置与 target 元素的大小:
确定中间位置,mid = start+((end - star)) >>1
如果相等,则返回寻找的元素或者 true;
如果 中间位置的值大于 target ,说明 target 在 左边,此时 end 下标要移到 mid 的前一个位置,即
end = mid -1;//往左找
如果中间位置的值小于 target ,说明 target 在右边,此时 star 下标要移到 mid 的后一个位置,即
star = mid + 1; //往右找
网友评论