Java實(shí)現(xiàn)二分查找算法實(shí)例分析
本文實(shí)例講述了Java實(shí)現(xiàn)二分查找算法。分享給大家供大家參考。具體如下:
1. 前提:二分查找的前提是需要查找的數(shù)組必須是已排序的,我們這里的實(shí)現(xiàn)默認(rèn)為升序
2. 原理:將數(shù)組分為三部分,依次是中值(所謂的中值就是數(shù)組中間位置的那個(gè)值)前,中值,中值后;將要查找的值和數(shù)組的中值進(jìn)行比較,若小于中值則在中值前面找,若大于中值則在中值后面找,等于中值時(shí)直接返回。然后依次是一個(gè)遞歸過程,將前半部分或者后半部分繼續(xù)分解為三部分。可能描述得不是很清楚,若是不理解可以去網(wǎng)上找。從描述上就可以看出這個(gè)算法適合用遞歸來(lái)實(shí)現(xiàn),可以用遞歸的都可以用循環(huán)來(lái)實(shí)現(xiàn)。所以我們的實(shí)現(xiàn)分為遞歸和循環(huán)兩種,可以根據(jù)代碼來(lái)理解算法
實(shí)現(xiàn)代碼:
public class BinarySearch { public static void main(String[] args){ int searchArr[] = new int[1000000]; for(int i=0;i<1000000;i++){ searchArr[i]=i; } System.out.println(binSearch(searchArr,0,searchArr.length-1,99)); System.out.println(binSearch(searchArr,99)); } //遞歸二分查找 public static int binSearch(int arr[], int start,int end,int sear){ int mid = (end-start)/2 + start; if(sear==arr[mid]){ return mid; } if(start>=end){ return -1; }else if(sear < arr[mid]){ return binSearch(arr,0,mid-1,sear); }else if(sear >arr[mid]){ return binSearch(arr,mid+1,end,sear); } return -1; } //循環(huán)二分查找 public static int binSearch(int arr[],int key){ int mid = arr.length/2; int start = 0; int end = arr.length-1; while(start<=end){ mid = (end-start)/2+start; if(key ==arr[mid]){ return mid; }else if(key <= arr[mid]){ end = mid-1; }else if(key >=arr[mid]){ start = mid+1; } } return -1; }
效率比較:
循環(huán)二分查找算法的效率高于遞歸二分查找算法
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用講解
這篇文章主要介紹了Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11Java C++題解leetcode816模糊坐標(biāo)示例
這篇文章主要為大家介紹了Java C++題解leetcode816模糊坐標(biāo)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Java使用Condition控制線程通信的方法實(shí)例詳解
這篇文章主要介紹了Java使用Condition控制線程通信的方法,結(jié)合實(shí)例形式分析了使用Condition類同步檢測(cè)控制線程通信的相關(guān)操作技巧,需要的朋友可以參考下2019-09-0920秒教你學(xué)會(huì)java?List函數(shù)排序操作示例
這篇文章主要為大家介紹了20秒教你學(xué)會(huì)List函數(shù)排序操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09全面剖析java 數(shù)據(jù)類型與運(yùn)算符
這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下2021-09-09SpringBoot?AOP?@Pointcut切入點(diǎn)表達(dá)式排除某些類方式
這篇文章主要介紹了SpringBoot?AOP?@Pointcut切入點(diǎn)表達(dá)式排除某些類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java 多個(gè)異常共享同一個(gè)異常處理器的方法
這篇文章主要介紹了Java 多個(gè)異常共享同一個(gè)異常處理器的方法,Java 的異常處理機(jī)制,在 Java 7 中有了非常大的改進(jìn)。其中一個(gè)特性就是,支持多個(gè)異常共享同一個(gè)異常處理器。,需要的朋友可以參考下2019-06-06