1、注意nums.length为数组的长度与数组的索引的关系
2、nums.length>>1等价nums.length/2。
3、不选nums.length/2的原因:
nums.length为int类型,最大正整数范围Integer.MAX_VALUE为2147483647,当数组里长度2147483650*2时,如果采用nums.length/2结果并不是2147483650,因为超过正整数表示范围。
1、二分查找代码
package com.itheima;
public class Solution {
public static int Search(int[] arr, int target){
int i =0;
int j =arr.length-1;
while (i<=j){
int middle = (i+j)>>1;
if(target<arr[middle]){
j=middle-1;
}else if(target>arr[middle]){
i=middle+1;
}else{
return middle;
}
}
return -1;
}
}
2、测试代码
注意:1、引入junit 4测试框架
2、assertEquals方法为junit包下Assert下的
assertEquals方法功能:对比两个参数是否相同
package com.itheima;
import org.junit.Test;
import static com.itheima.Solution.Search;
import static org.junit.Assert.assertEquals;
public class TestSolution {
@Test
public void test(){
int[] a = {1,2,3,4,5,7};
//4为返回的索引值
assertEquals(4,Search(a,5));
}
}