前言
不知道大家玩过这么一个游戏没— _猜数字大小。 先在心里想一个100以内的数字,然后参与者来猜数字,每次只提示大了或者小了,直到参与者猜中心中所想的数为止。
怎么来快速猜出来呢?利用二分法Q查找就可以快速实现。接下来给大家讲解二分法查找的思想, 以及如何用java代码实现。
算法思想
二分法查找又称为折半查找,二分法查找的基本思想是把数组中的元素从小到大有序地存放进数组中,首先将给定值与数组中间位置的值作比较,如果相等,则匹配成功。铡,若比较值小了,则在数组的前半部分继续二分法查找;若比较值大了,则在数组后半部分进行二分法查找。如此循环往复,直到比较值与中间值匹配,完成查找。
public class 二分法 {public static void main(String[] args) {int[] ints = {44, 55, 66, 1, 32, 32, 78};// 利用工具包对数组进行排序Arrays.sort(ints);for (int anInt : ints) {System.out.println(anInt);}int i1 = Arrays.binarySearch(ints, 44);System.out.println("i1 = " + i1);int i2 = binarySearch(ints, 44);System.out.println("i2 = " + i2);}public static int binarySearch(int[] ints,int num){// 初始下标int begin = 0;// 结束下标int end = ints.length - 1;while (end >= begin){// 找出每次循环的中间下标int mid = (begin + end)/2;// 正好相等,则返回这个数的下标if (num == ints[mid]) {return mid;}// 说明这个数存在于数组的右边if (num > ints[mid]){// 改变开始下标begin = mid + 1;}// 说明这个数存在于数组的左边if (num > ints[mid]){// 改变结束下标end = mid - 1;}}// -1代表未找到return -1;}}
