折半查找是一種效率較高的查找算法。折半查找的先決條件是查找表中的數據元素排列必須是有序的。折半查找先以有序數列的中點位置爲比較對象,若是要找的元素值小於搞中點元素,則將待查序列縮小爲左半部分,不然爲右半部分。經過一次比較,能夠將查找的區間縮小一半,能夠明顯的減小比較的次數,提升查找效率。 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); } }