演算法 二分查詢演算法(Java實現)

2021-06-05 11:36:21 字數 1563 閱讀 7981

1、前提:二分查詢的前提是需要查詢的陣列必須是已排序的,我們這裡的實現預設為公升序

2、原理:將陣列分為三部分,依次是中值(所謂的中值就是陣列中間位置的那個值)前,中值,中值後;將要查詢的值和陣列的中值進行比較,若小於中值則在中值前面找,若大於中值則在中值後面找,等於中值時直接返回。然後依次是乙個遞迴過程,將前半部分或者後半部分繼續分解為三部分。可能描述得不是很清楚,若是不理解可以去網上找。從描述上就可以看出這個演算法適合用遞迴來實現,可以用遞迴的都可以用迴圈來實現。所以我們的實現分為遞迴和迴圈兩種,可以根據**來理解演算法

3、實現:**如下

package org.cyxl.algorithm.search;

/** * 二分查詢

* @author cyxl

* */

public class binarysearch

/*** 獲取迴圈的次數

* @return

*/public int getlcount()

/*** 執行遞迴二分查詢,返回第一次出現該值的位置

* @param sorteddata 已排序的陣列

* @param start 開始位置

* @param end 結束位置

* @param findvalue 需要找的值

* @return 值在陣列中的位置,從0開始。找不到返回-1

*/public int searchrecursive(int sorteddata,int start,int end,int findvalue)

else if(findvalue>1; //相當於(start+end)/2

//中值

int middlevalue=sorteddata[middle];

if(findvalue==middlevalue)

else if(findvalue

package org.cyxl.algorithm.search.test;

import org.cyxl.algorithm.search.binarysearch;

import org.junit.test;

public class binarysearchtest ;

int findvalue=9;

int length=sorteddata.length;

int pos=bs.searchrecursive(sorteddata, 0, length-1, findvalue);

system.out.println("recursice:"+findvalue+" found in pos "+pos+";count:"+bs.getrcount());

int pos2=bs.searchloop(sorteddata, findvalue);

system.out.println("loop:"+findvalue+" found in pos "+pos+";count:"+bs.getlcount());

}}

5、總結:這種查詢方式的使用場合為已排序的陣列。可以發現遞迴和迴圈的次數是一樣的

二分查詢演算法java實現

1 演算法概念。二分查詢演算法也稱為折半搜尋 二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。請注意這種演算法是建立在有序陣列基礎上的。2 演算法思想。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間...

二分查詢演算法(Java實現)

二分查詢測試類 注意 二分查詢必須用在有序列表中進行二分查詢 public class binarychoptest for int i 0 i 10 i sign 1 使用二分查詢和遞迴的結合進行查詢 時間複雜度 o logn param arrays 有序陣列 param target 要查詢的...

二分查詢演算法 java

題目 在乙個有序陣列中查詢給定值得下標 其中有兩個前提,一是順序儲存結構,二是儲存結構已經是排好序的。給定前提 int array new int int num 50 intleft 0,right array.length 1 先看看直接用迴圈的方式 int index 1 int middle...