java算法之二分查找法的實(shí)例詳解
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)文章
Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題
這篇文章主要介紹了Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05springboot后臺(tái)session的存儲(chǔ)與取出方式
這篇文章主要介紹了springboot后臺(tái)session的存儲(chǔ)與取出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Java多線程中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