条件1:数组为整型数组,并且有序
条件2:用递归方法,数组包含传的数字,就返回存在于数组的位置,否则返回-1
二分法原理:有序数组,取中间数字(A)和要查找的参数(B)比较,如果A>B,则说明B在A的左侧,否则在右侧,然后再拿左侧的中间数字和B比较,以此类推。
代码:
/** * 二分法查找,在有序数组中找位置 * @author 张凯 * @email [email protected] * @see 做人,总要信。 */ public class TwoSearch { /** * 二分法查找 * @param number 有序数组 * @param num 要查找的数字 * @param left 左边位置 * @param right 右边位置 * @param mid 中间位置 * @return 返回数字在数组中的位置,没有则返回-1 */ public static int search(int[] number,int num,int left,int right,int mid) { /** * 1,left == right 说明数组为空或长度为1 * 2,number[mid] != num 说明数组长度为1的时候,元素不等于要找的数字 */ if (left == right && number[mid] != num) { return -1; } /** * 如果number[mid] == num 那就返回mid。 */ if (number[mid] == num) { return mid; } /** * 如果mid == left 或者 mid == right ,说明从中间已经找到left或者right边了,还没有找到,返回-1 */ if (mid == left || mid == right) { return -1; } /** * 如果大于中间,那往right找,然后把right侧的再折半找 */ if (num > number[mid]) { mid++; return search(number,num,mid,right,(mid+right)/2); } else { /** * 如果小于中间的数字,就往left找,然后把left侧的再折半找 */ mid--; return search(number,num,left,mid,(left+mid)/2); } } /** * 测试 * @param args */ public static void main(String[] args) { int[] number = {1,4,5,66,77,4545}; int num = 66; int left = 0; int right = number.length - 1; int mid = (left + right) / 2; int a = search(number, num, left, right, mid); System.out.println(a); } } ps:如果写的有问题,给指出来,谢谢啦。如有更好的方法也可以讨论。