微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在使用Arrays.binarySearch时需要使用偏移量?

如何解决为什么在使用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; 
        } 
    } 
} 

解决方法

因为Arrays.binarySearch()

返回:
搜索关键字的索引(如果包含在指定范围内的数组中);否则为(-(insertion point) - 1)。插入点定义为将键插入数组的点:范围内的第一个元素的索引大于键,如果范围内的所有元素都小于指定的键,则索引为toIndex。>

所以有两种情况:

  • 如果找到了元素,则+1只会导致在现有元素之后插入重复项,而abs()不会执行任何操作
  • 如果元素不是重复元素,则+1实际上会撤消上面突出显示的表达式中的-1,而abs()使其变为非负数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。