Java 二分搜尋

2021-08-15 09:21:26 字數 1970 閱讀 9682

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。

演算法思想

搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。

/** 

* 二分查詢演算法

* * @param srcarray 有序陣列

* @param key 查詢元素

* @return key的陣列下標,沒找到返回-1

*/

public class binarysearch ;

system.out.println("遞迴實現:"+binsearch(srcarray,0,srcarray.length-1,94));

system.out.println("while迴圈實現:"+binsearch(srcarray,65));

}// 二分查詢普通迴圈實現

private static int binsearch(int srcarray, int key)

int start=0;

int end=srcarray.length-1;

while(start<=end)else

}return -1;

}// 二分查詢遞迴實現

private static int binsearch(int srcarray, int start, int end, int key)

if (start>=end) else if(key>srcarray[mid])else if(key二分查詢法是對一組有序的數字中進行查詢,傳遞相應的資料,進行比較查詢到與原資料相同的資料,查詢到了返回對應的陣列下標,沒有找到返回-1。

**拆分來看,如下:

(1) 採用非遞迴方式完成二分查詢法:

/**

* 二分查詢普通實現。

* @param srcarray 有序陣列

* @param key 查詢元素

* @return 不存在返回-1

*/

public static int binsearch(int srcarray, int key) else if (key > srcarray[mid]) else

} return -1;

}

(2)採用遞迴方式完成二分查詢演算法:

/** 

* 二分查詢遞迴實現。

* @param srcarray 有序陣列

* @param start 陣列低位址下標

* @param end 陣列高位址下標

* @param key 查詢元素

* @return 查詢元素不存在返回-1

*/

public static int binsearch(int srcarray, int start, int end, int key)

if (start >= end) else if (key > srcarray[mid]) else if (key < srcarray[mid])

return -1;

}

(3)呼叫執行main函式:
public static void main(string args) ;  

system.out.println(binsearch(srcarray, 0, srcarray.length - 1, 222));

system.out.println(binsearch(srcarray,81));

}

Java 二分搜尋 二分查詢

對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...

二分搜尋樹(JAVA)

二分搜尋樹是在二叉樹的基礎上定義 所有節點的左子節點需要小於 不大於 該節點,右子節點需要大於 不小於 該節點 實現 如下 注意 這裡實現的二分搜尋樹會去重,如果允許重複節點,則在新增元素時,定義值相等的元素存放在節點的左子節點或右子節點中。public class bstcomparable pr...

二分搜尋樹 JAVA版

created by enzo cotter on 2018 7 16.public class bstextends comparable private node root private int size public bst public intsize public boolean ise...