今天主要研究了一下二分法排序,进行二分法查找的数据首先要有一定的顺序(比如升序或者降序),其次是如果有重复数据,则会查找到第一个数据的索引座位查询结果。其实二分法实现的原理很简单,将数据一分为二,将中间的数据(middle)与要查找的数据(key)进行比较,进行递归方法进行查找,知道查找的key等于middle。代码如下:
/** * 二分法查找又称折半查找,它是一种效率比较高的查找方法。 * 但是二分法查找有个要求就是: * 1.必须采用顺序结构存储的数据; * 2.比选关键字大小有序排序 * Created by Administrator on 2017/7/22. */ public class BinarySearch { /** * 方法二 * @param dataset * @param data * @param beginIndex * @param endIndex * @return */ public static int binarySearch1(int[] dataset,int data,int beginIndex,int endIndex){ int midIndex = (beginIndex + endIndex)/2; if (data < dataset[beginIndex] || data > dataset[endIndex] || beginIndex > endIndex){ return -1; } if (data < dataset[midIndex]){ return binarySearch1(dataset,data,beginIndex,midIndex-1); }else if (data > dataset[midIndex]){ return binarySearch1(dataset,data,midIndex+1,endIndex); }else { return midIndex; } } public static void main(String[] args){ int[] src = {1,2,5,45,78,1235,4568,7894}; System.out.println(binarySearch1(src,8,2,src.length-1)); } }