二分法:

1、二分法查找算法是建立在排序的基础之上的,即没有排序的

数据是无法查找的;

2、二分法查找的效率高于"一个挨着一个"的这种查找方式;

3、二分法查找原理?我们用一个例子来说明;

int[] arr ={0,5,9,10,20,60,70,80,90,100};

目标:找出100的下标:

数组元素为:0(下标为0) 5 9 10 20 60 70 80 90 100(下标为9);

3.1、找出中间元素:(0+9) / 2 --> 4(中间元素);

3.2、用找到的中间元素跟目标元素比较:20 < 100, 此时说

所要查找的元素在中间元素的右边,则开始下标就变

成了:4 + 1;

3.3、继续循环,找出中间值:(5+9) / 2 --> 7(中间元素);

3.4、用找到的中间元素跟目标元素比较:80 < 100, 此时说

所要查找的元素在中间元素的右边,则开始下标就变

成了:7 + 1;

3.5、继续循环,找出中间值:(8+9) / 2 --> 8(中间元素);

3.6、用找到的中间元素跟目标元素比较:90 < 100, 此时说

所要查找的元素在中间元素的右边,则开始下标就变

成了:8 + 1;

3.7、继续循环,找出中间值:(9+9) / 2 --> 9(中间元素);

3.8、用找到的中间元素跟目标元素比较:100 = 100, 此时说

明目标元素已被找到;

4、代码的实现:

public static void main(String[] args) {int[] arr ={0,5,9,10,20,60,70,80,90,100};// 找出这个数组中 9 所在的下标// 调用方法// int index = Arrays.binarySearch(arr,9); 调用了sun公司中的数组工具类int index = binarySearch2(arr,9);System.out.println(index == -1?"该元素不存在":"该元素的下标为"+index);}/*** 从数组中查找目标元素的下标* @param arr 目标数组* @param dest 目标元素* @return -1表示该元素不存在,返回其它表示返回该元素的下标*/public static int binarySearch2(int[]arr,int dest) {// 开始下标int begin = 0;// 结束下标int end = arr.length-1;// 开始元素的下标只要在结束元素的下标发左边,就可以继续循环while (begin <= end){// 中间元素下标int mid = (begin + end) / 2;if (arr[mid] == dest){return mid;}else if (arr[mid] < dest){// 目标在中间元素的右边// 开始元素下标发生改变begin = mid + 1; // 一直增}else {// arr[mid] > dest// 目标在中间元素的左边end = mid - 1; // 一直减}}return -1;}

总结:在需要查找元素时,如果是一对数字,首选方法为二分法,因为二分法的效率高,而且也比较便捷,用起来更方便,但是,最重要的一点还是"要对目标数组进行排序",有关于数组的排序,可翻我的上一篇博客。在Java中,sun公司也帮我们写好了二分法的代码,我们可以通过"Arrays.binarySearch(目标数组,目标元素);",我们可以通过"Arrays.sort(目标数组);"进行对数组的排序,然后在通过"Arrays.binarySearch(目标数组,目标元素);"进行查找,又方便效率也高。

分类: 游戏攻略 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录