二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。所以在采用二分法查找时,数据需是有序不重复的,如果是无序的也可通过选择排序、冒泡排序等数组排序方法进行排序之后,就可以使用二分法查找。
基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止,但是如果当前段的索引最大值小于当前段索引最小值,说明查找的值不存在,返回-1,不继续查找。
下面贴出代码实现:
import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * Created by Sam on 18/12/9. */ public class Test { public static void main(String[] args) { int[] array = {1,4,7,9,12,56,78,89,120,179,180,200,290}; System.out.println("index="+binarySearch(array,290)); } public static int binarySearch(int[] array,int searchNumber){ int minIndex = 0; int maxIndex = array.length - 1; int searchIndex = (minIndex + maxIndex) >> 1 ; int count = 0; while (array[searchIndex] != searchNumber){ System.out.printf("第次%d次运算/n", ++count); if (array[searchIndex] > searchNumber){ maxIndex = searchIndex - 1 ; }else { minIndex = searchIndex + 1 ; } if (minIndex>maxIndex){ return -1; } searchIndex = (minIndex + maxIndex) >> 1 ; } return searchIndex; } }
最后更新于 2019-01-25 23:25:27 并被添加「java 二分查找 算法」标签,已有 2 位童鞋阅读过。