欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java算法之二分查找法的實(shí)例詳解

 更新時(shí)間:2017年08月10日 08:38:07   作者:aspook  
這篇文章主要介紹了java算法之二分查找法的實(shí)例詳解的相關(guān)資料,這里提供簡(jiǎn)單實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下

java算法之二分查找法的實(shí)例詳解

原理

假定查找范圍為一個(gè)有序數(shù)組(如升序排列),要從中查找某一元素,如果該元素在此數(shù)組中,則返回其索引,否則返回-1。通過數(shù)組長(zhǎng)度可取出中間位置元素的索引,將其值與目標(biāo)值比較,如果中間位置元素值大于目標(biāo)值,則在左部分進(jìn)行查找,如果中間位置值小于目標(biāo)值,則在右部分進(jìn)行查找,如此循環(huán),直到結(jié)束。二分查找算法之所以快是因?yàn)樗鼪]有遍歷數(shù)組的每個(gè)元素,而僅僅是查找部分元素就能找到目標(biāo)或確定其不存在,當(dāng)然前提是查找范圍為有序數(shù)組。

Java的簡(jiǎn)單實(shí)現(xiàn)

package me.geed.algorithms; 
 
public class BinarySearch { 
 
  /** 
   * 從一個(gè)有序數(shù)組(如升序)中找到值為key元素 
   * @param key 
   * @param array 
   * @return 如果找到目標(biāo)元素,則返回其在數(shù)組中的索引,否則返回-1 
   */ 
  public static int find(int key, int[] array){ 
    int low = 0; 
    int high = array.length - 1; 
    while (low <= high) { 
      int mid = low + (high - low) / 2; 
      if (array[mid] > key) { 
        high = mid - 1; 
      } else if (array[mid] < key) { 
        low = mid + 1; 
      } else { 
        return mid; 
      }       
    } 
    return -1;    
  } 
   
  public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int[] array = {2, 3, 5, 9, 10, 13, 23, 45, 78, 89, 100, 128, 256}; 
    System.out.println("目標(biāo)元素索引值:" + BinarySearch.find(9, array));     
    System.out.println("目標(biāo)元素索引值:" + BinarySearch.find(26, array)); 
  } 
 
} 

輸出結(jié)果為:

目標(biāo)元素索引值:3 
目標(biāo)元素索引值:-1 

二分查找算法的時(shí)間復(fù)雜度

假設(shè)范圍數(shù)組長(zhǎng)度為N,則二分查找的時(shí)間復(fù)雜度為O(logN)

以上就是java算法中二分查找的實(shí)例詳解,如有疑問請(qǐng)留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • java字符串相似度算法

    java字符串相似度算法

    這篇文章主要介紹了java字符串相似度算法,是Java實(shí)現(xiàn)比較典型的算法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 解析Spring Cloud Bus消息總線

    解析Spring Cloud Bus消息總線

    這篇文章主要介紹了Spring Cloud Bus消息總線的介紹及使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Springboot自定義banner及驗(yàn)證過程

    Springboot自定義banner及驗(yàn)證過程

    這篇文章主要介紹了Springboot自定義banner及驗(yàn)證過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題

    Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題

    這篇文章主要介紹了Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • springboot后臺(tái)session的存儲(chǔ)與取出方式

    springboot后臺(tái)session的存儲(chǔ)與取出方式

    這篇文章主要介紹了springboot后臺(tái)session的存儲(chǔ)與取出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 分享Java開發(fā)必須掌握的日志分析命令

    分享Java開發(fā)必須掌握的日志分析命令

    這篇文章主要介紹了分享Java開發(fā)必須掌握的日志分析命令,在日常工作中,如果我們遇到線上問題,一般的處理步驟應(yīng)該是先保留現(xiàn)場(chǎng),然后再考慮回滾,之后再是解決問題
    2019-07-07
  • 老生常談java垃圾回收算法(必看篇)

    老生常談java垃圾回收算法(必看篇)

    下面小編就為大家?guī)硪黄仙U刯ava垃圾回收算法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java多線程中Thread.currentThread()和this的區(qū)別詳解

    Java多線程中Thread.currentThread()和this的區(qū)別詳解

    這篇文章主要介紹了Java多線程中Thread.currentThread()和this的區(qū)別詳解,Thread.currentThread()方法返回的是對(duì)當(dāng)前正在執(zhí)行的線程對(duì)象的引用,this代表的是當(dāng)前調(diào)用它所在函數(shù)所屬的對(duì)象的引用,需要的朋友可以參考下
    2023-08-08
  • 基于java線程安全問題及原理性分析

    基于java線程安全問題及原理性分析

    下面小編就為大家?guī)硪黄趈ava線程安全問題及原理性分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java常見異常及處理方式總結(jié)

    Java常見異常及處理方式總結(jié)

    今天給大家?guī)淼氖荍ava的相關(guān)知識(shí),文章圍繞著Java異常展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評(píng)論