如何解决为什么在使用Arrays.binarySearch时需要使用偏移量?
为什么将1
添加到Array.binarySearch(array,i,x) + 1)
?
class GFG
{
public static void main(String[] args)
{
final int[] arr = {37,23,17,12,72,31,46,100,88,54 };
new GFG().sort(arr);
for(int i=0; i<arr.length; i++)
System.out.print(arr[i]+" ");
}
public void sort(int array[])
{
for (int i = 1; i < array.length; i++)
{
int x = array[i];
//Find location to insert using binary search
int j = Math.abs(Arrays.binarySearch(array,x) + 1);
//Shifting array to one location right
System.arraycopy(array,j,array,j+1,i-j);
//Placing element at its correct location
array[j] = x;
}
}
}
解决方法
返回:
搜索关键字的索引(如果包含在指定范围内的数组中);否则为(-(insertion point) - 1)
。插入点定义为将键插入数组的点:范围内的第一个元素的索引大于键,如果范围内的所有元素都小于指定的键,则索引为toIndex。>
所以有两种情况:
- 如果找到了元素,则+1只会导致在现有元素之后插入重复项,而
abs()
不会执行任何操作 - 如果元素不是重复元素,则+1实际上会撤消上面突出显示的表达式中的-1,而
abs()
使其变为非负数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。