標籤:java 演算法 資料結構 二分法尋找
首先介紹一下什麼是二分法尋找。
顧名思義二分法即多次將待查數組的長度折半,但前提條件時待尋找數組中的資料需要是已經排序好了的資料。
主要思想:
對於待尋找數組arr[low,high],其中high=arr.length-1,待尋找元素des
(1)確定數組中間位置mid=(low+high)/2
(2)將尋找值des與arr[mid]進行比較,若相等,則直接返回該位置;否則確定新的尋找位置,繼續二分尋找。地區確定如下:如果arr[mid]>des由數組的有序性可知
arr[mid,mid+1.........,high]>des;故新的區間為arr[low,.........,mid-1];如果arr[mid]<des,同理由數組的有序性可知arr[low,.........mid-1]<des,則新的區間為arr[mid+1,......,high]。每一次尋找都與中間值比較,就可以確定是否尋找成功,不成功當前尋找區間縮小一半
具體代碼如下:
package Algorithm;public class binarySearch{public static void main(String[] args){int[] src=new int[]{1,3,5,7,9};System.out.println(binarySearch1(src,7));System.out.println(binarySearch1(src,3,0,src.length-1));}/** * *二分尋找演算法* * @param srcArray * 有序數組 * @param des * 尋找元素 * @return des的數組下標,沒找到返回-1 */public static int binarySearch1(int[] srcArray,int des){int low=0;int high=srcArray.length-1;while (low<=high){int mid=(low+high)/2;if (des==srcArray[mid]){return mid;}else if(des<srcArray[mid]){high=mid-1;}else{low=mid+1;}}return -1;}/** * 二分尋找(遞迴)被尋找數在數組中的位置 * @param dataset * @param data * @param beginIndex * @param endIndex * @return index 被尋找數下標位置 */public static int binarySearch1(int[]dataset,int data,int beginIndex,int endIndex){int mid=(beginIndex+endIndex)/2;if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){return -1;}if (data<dataset[mid]){return binarySearch1(dataset,data,beginIndex,mid-1);}else if(data>dataset[mid]){return binarySearch1(dataset,data,mid+1,endIndex);}else{return mid;}}}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
二分法尋找——Java