在常見的業務邏輯中,查找的功能是必不可少,最基本的查找就是順序查找,按照順序索引,從大到小開始依次尋找,找到則返回true,沒找到則返回false,如果需要尋找的元素它的索引在最后,那就必須遍歷-1次,才能找到目標元素,所以這個時候,如果想要簡化算法,那么二分查找是個不錯的選擇,他可以至少減少一半的時間復雜度,關于二分查找有以下幾種性質。
對于沒有排序的原數據,我們也可以通過提前排序,再送入二分查找算法,當然也可以使用其他更為快捷的算法以達到簡化算法的目的!
Java實現的完整代碼如下:
import java.util.Scanner;
public class Binarysearch {
public static void main(String[] args) {
int []arg = new int[]{1,3,5,7,9,34,36,38,45,67};
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你需要查找的數字");
int findNum = sc.nextInt();
boolean flag = Find(arg,findNum);
if (flag){
System.out.println("找到啦");
}
else
System.out.println("沒有噢");
}
private static boolean Find(int[] arg,int findNum) {
int min = 0,max = arg.length-1;
int middle = (min+max)/2;
while (arg[middle] != findNum){
if(arg[middle]>findNum){
max = middle - 1;
middle = (max + min)/2;
} else if (arg[middle] max) {
return false;//如果min大于max了,那就說明超過查找范圍了,也就意味著找不到了
}
}
System.out.println("它的索引是"+middle);//此處可以輸出目標元素的索引
return true;//能夠退出循環那就說明一定是找到啦
}
}
實現效果圖如下:
附加:
1.插值查找
如果數據分布較均勻,可以使用插值查找改進二分查找,提高效率
其實具體操作就是改變mid的計算過程,大致的根據目標值給他劃定他在所有值當中大致處于哪個位置,這樣算出來的mid就會更接近目標值excel一組數字順序換,甚至直接就是目標值,大大降低時間復雜度,但是規定查找的數列中的數值為均勻變化。
2.斐波那契查找
利用此方法也可以從某種程度上提高二分查找的效率。
具體操作也是改變mid的計算方式excel一組數字順序換,讓mid指向更為精準。
“黃金比例為”:1:0.618