折半查找是一种效率较高的查找算法。折半查找的先决条件是查找表中的数据元素排列必须是有序的。折半查找先以有序数列的中点位置为比较对象,若是要找的元素值小于搞中点元素,则将待查序列缩小为左半部分,不然为右半部分。经过一次比较,能够将查找的区间缩小一半,能够明显的减小比较的次数,提升查找效率。 java
折半查找先以有序数列的中点位置为比较对象,比较会产生3中状况,一种是带查找值大于中间位置的数,此时咱们要把比较期间缩小为有序数列的后半部分;一种是待查找值小于中间位置的数,此时咱们要把比较区间缩小为有序数列的前半部分;一种是待查找值等于中点位置的书,此时查找成功。这样不断比较,知道查找成功或者区间小于0,就中止查找。 算法
package test.algorithm.FastSlowPointer; /** * 折半查找(二分查找) * @author serenity * */ public class BinarySearch { /** * 折半查找 * 返回元素位置,没找到返回-1 * @param data * @param s * @return */ public static int binarySearch(int[] data , int s){ int low = 0; int high = data.length-1; int mid = (high+low)/2; int flag = -1; int count = 0; while(low<=high){ count++; mid = (high+low)/2; if(s<data[mid]){ //待查找值s小于中值 high = mid-1; }else if(s>data[mid]){ //待查找值s大于中值 low = mid+1; }else{ //待查找值s等于中值 flag = mid; break; } } System.out.println("查找次数:"+count); return flag; } public static void main(String[] args) { int[] data = {1,2,3,4,5,6,7,8,9,10}; System.out.print("数组:"); for(int i : data){ System.out.print(i+" "); } System.out.println(); int search = 4; int position = binarySearch(data,search); System.out.println("值"+search+"的元素位置为:"+position); } }