java算法之二分查找法的實例詳解
java算法之二分查找法的實例詳解
原理
假定查找范圍為一個有序數(shù)組(如升序排列),要從中查找某一元素,如果該元素在此數(shù)組中,則返回其索引,否則返回-1。通過數(shù)組長度可取出中間位置元素的索引,將其值與目標(biāo)值比較,如果中間位置元素值大于目標(biāo)值,則在左部分進(jìn)行查找,如果中間位置值小于目標(biāo)值,則在右部分進(jìn)行查找,如此循環(huán),直到結(jié)束。二分查找算法之所以快是因為它沒有遍歷數(shù)組的每個元素,而僅僅是查找部分元素就能找到目標(biāo)或確定其不存在,當(dāng)然前提是查找范圍為有序數(shù)組。
Java的簡單實現(xiàn)
package me.geed.algorithms;
public class BinarySearch {
/**
* 從一個有序數(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
二分查找算法的時間復(fù)雜度
假設(shè)范圍數(shù)組長度為N,則二分查找的時間復(fù)雜度為O(logN)
以上就是java算法中二分查找的實例詳解,如有疑問請留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題
這篇文章主要介紹了Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Java多線程中Thread.currentThread()和this的區(qū)別詳解
這篇文章主要介紹了Java多線程中Thread.currentThread()和this的區(qū)別詳解,Thread.currentThread()方法返回的是對當(dāng)前正在執(zhí)行的線程對象的引用,this代表的是當(dāng)前調(diào)用它所在函數(shù)所屬的對象的引用,需要的朋友可以參考下2023-08-08

