二分法查詢:
第一:二分法中查詢建立在排序的基礎之上。
第二:二分法查詢效率要高於「乙個挨著乙個」的這種查詢方式。
第三:二分查詢法原理?
10(0下標) 23 56 89 100 111 222 235 500 600
目標:找出600下標
(0 + 9) / 2 --> 4(中間元素的下標)
arr[4]這個元素就是中間元素:arr[4]是100
100 < 600
說明被查詢的元素在100的右邊。
那麼此時開始下標變成:4 + 1
(5 + 9) / 2 --> 7 (中間元素的下標)
arr[7] 對應的是:235
235 < 600
說明被查詢的元素在235的右邊。
開始下標又進行了轉變:7 + 1
(8 + 9) / 2 --> 8
arr[8] --> 500
500 < 600
開始元素的下標又發生了變化:8 + 1
(9 + 9) / 2 --> 9
arr[9]是600,正好和600相等,此時找到了。
不用二分法查詢案例:
packagecom.j**ase.arrays;
/*陣列的元素查詢:
陣列元素查詢有兩種方式:
第一種方式:乙個乙個挨著找,直到找到為止。
第二種方式:二分法查詢(演算法)。這個效率高。 */
public
class
arrayssearch ;
//需求:找出87的下標。如果沒有返回-1
/*for (int i = 0; i < arr.length;i++)
}// 程式執行到此處,表示沒有87
system.out.println("不存在87的元素");
*///
最後以上的程式封裝乙個方法,思考:傳什麼引數?返回什麼值?
//傳什麼:第乙個引數是陣列,第二個引數是被查詢的元素。
//返回值:返回被查詢的這個元素的下標。如果找不到返回-1。
int index = arraysearch(arr,87);
system.out.println(index == -1 ? "該元素不存在" : "該元素下標是:" +index);
}/*** 從陣列中檢索某個元素的下標
* @param
arr 被檢索的陣列
* @param
i 被檢索的元素
* @return
大於等於0的數表示元素的下標。-1表示該元素不存在。
*/public
static
int arraysearch(int arr, int
i) }
return -1;
}}
模擬j**a.util.arrays;中的二分法查詢案例:
packagecom.j**ase.arrays;
/*1 陣列工具類:自己寫的。不是sun的
2 關於查詢演算法中的:二分法查詢。
10(下標0) 11 12 13 14 15 16 17 18 19 20(下標10) arr陣列
通過二分法查詢,找出18這個元素的下標。
(0 + 10) / 2 --> 中間元素下標是5
拿著中間這個元素和目標要查詢的元素進行對比:
中間元素是arr[5] arr[5] --> 15
15 < 18(被查詢的元素)
被查詢的元素18目前中間元素15的右邊。
所以開始元素的下標從0變成5 + 1
在重新計算乙個中間元素的下標:
開始下標是: 5 + 1
結束下標是:10
(6 + 10) / 2 --> 8
8下標對應的元素arr[8]是18
找到的中間元素正好和被找的元素18相等。
二分法查詢的種植條件:一直折半,直到中間的那個元素恰好是被查詢的元素。
3 二分法查詢演算法是基於排序的基礎之上。(沒有排序的資料是無法查詢的) */
public
class
arraysutil ;
//找出arr這個陣列彙總200所在的下標。
//呼叫方法
int index = binarysearch2(arr,222);
system.out.println(index == -1 ? "該元素不存在!" : "該元素的下標是:" +index);
}/*** 從陣列中查詢目標元素的下標
* @param
arr 被查詢的陣列(這個必須是已經排序的。)
* @param
dest 目標元素
* @return
-1表示該元素不存在,其它表示返回該元素的下標。
*/public
static
int binarysearch2(int arr, int
dest)
else
if (arr[mid] }
return -1;
}}
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...
二分法查詢
前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...