/**
* 二分发查找方法的实现
* @param a 要查找的目标整型数组
* @param num 要查找的(整)数
* @return 查找到的结果(整数)
*/
public int binarySearch(int[] a, int num) {
Arrays.
sort(a
); //一定要排序后才能实现二分法查找
int start = 0; //开始元素的索引
int end = a.length - 1; //结束元素的索引(数组内元素的索引是当前长度小一位)
int mid = (start + end) / 2; //中间元素的索引=(开始元素的索引+结束元素的索引)/2,这是死的所以写死没关系
while(num!=a[mid]){ //用while循环判断当要找的数字不是当前数组的中间元素时,继续查找
if(num<a[mid]){ //如果要找的数字小于当前数组的中间元素,即以中间索引的元素为分界
end=mid-1; //当前数组中的结束元素索引递减1
}else{ //如果要找的数字大于当前数组的中间元素
start=mid+1; //当前数组中的开始元素索引递增1
}
mid=(start + end) / 2; //上面的田间判断完后,重新计算中间元素的索引
}
return a[mid]; //到这一步说明要找的数字已经找到了,所以返回这个数字
/*总结:
* 将要查找的数组排序,将数组以中间元素为分隔成两组元素,如果中间元素就是要找的数则返回,
* 如果不是则判断是否比中间元素大,大则分到右手边的数组,小则分到左手边的数组,
* 分完后要以当前数组为主,重新分配开始索引,中间索引和结束索引,
* 以此类推以循环为条件最终得到要查找的数。
* */
}//源代码片段来自云代码http://yuncode.net