给定一个整型数组 `int[] arr = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};`,以下哪个操作会导致`Arrays.binarySearch(arr, 16)` 和 `Arrays.binarySearch(arr, 0, 5, 16)` 返回不同的结果?
答案解析
A选项中,反向排序后,数组不再有序,二分查找的结果将不再正确。但是,`Arrays.binarySearch(arr, 16)`仍然会查找整个数组,而`Arrays.binarySearch(arr, 0, 5, 16)`则只在索引0到4之间查找,两者返回的结果会因为数组整体无序而都错误。因此,即使两者可能返回不同的负值或错误索引,但并不符合题意。B选项中, `Arrays.fill(arr, 0, 5, 10);` 会将数组`arr`索引0到4的元素都替换为10,原本的排序被破坏,`Arrays.binarySearch(arr, 16)`依然会在整个数组中进行搜索(尽管此时结果可能不正确),而 `Arrays.binarySearch(arr, 0, 5, 16)` 则是在前5个元素中搜索。C选项,`Arrays.copyOfRange(arr, 0, 5)` 生成的是一个新数组,与原数组无关,即使在新数组中进行二分查找,也不会影响 `Arrays.binarySearch(arr, 16)` 和 `Arrays.binarySearch(arr, 0, 5, 16)` 的结果。D选项,只交换数组中索引为0和9的元素,数组仍然是整体有序的(除了索引0和9位置),但是`Arrays.binarySearch(arr, 16)`会在整个有序数组中正确找到16的索引,而 `Arrays.binarySearch(arr, 0, 5, 16)`仍然会在有序的索引0到4之间寻找,索引范围没有发生变化,因此二分查找的结果不会变化。因此只有B会改变二分查找的正确性,并可能导致返回结果的差异。需要注意,即便排序被破坏,但两个二分查找的范围不同,查找失败时返回的结果也可能不同。
正确答案:B