二分法查詢 Java

2021-09-01 07:15:49 字數 1477 閱讀 3915

原理:

基本思想:假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;若x小於當前位置值,則在數列的前半段中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。

演算法:

假如有一組數為3,12,24,36,55,68,75,88要查給定的值24.可設三個變數front,mid,end分別指向資料的上界,中間和下界,mid=(front+end)/2.

1.開始令front=0(指向3),end=7(指向88),則mid=3(指向36)。因為mid>x,故應在前半段中查詢。   

2.令新的end=mid-1=2,而front=0不變,則新的mid=1。此時x>mid,故確定應在後半段中查詢。   

3.令新的front=mid+1=2,而end=2不變,則新的mid=2,此時a[mid]=x,查詢成功。   

如果要查詢的數不是數列中的數,例如x=25,當第三次判斷時,x>a[mid],按以上規律,令front=mid+1,即front=3,出現front>end的情況,表示查詢不成功。   

例:在有序的有n個元素的陣列 中查詢使用者輸進去的資料x。   

演算法如下:   

1.確定查詢範圍front=0,end=n-1,計算中項mid(front+end)/2。   

2.若a[mid]=x或front>=end,則結束查詢;否則,向下繼續。   

3.若a[mid]x,說明待查詢的元素值只可能在比中項元素小的範圍內,則把 mid-1的值賦給end,並重新計算mid,轉去執行步驟2。   

[一維陣列,折半查詢]

實現:

/**

* * 乙個二分查詢法

* * @author nileader

*/public class binaryquery ;

for (int i = 0; i < initvals.length; i++)

scanner cin = new scanner(system.in);

while (cin.hasnext())

} /*

* @param values 要找的陣列物件

* * @param targetval 要找的目標數字

* * @return -1 沒有找到,返回-1

*/public int query(int initvals, int targetval)

else if (lowbound > upbound)

return -1;

else

if (initvals[nowpostion] < targetval)

lowbound = nowpostion + 1;

else

upbound = nowpostion - 1;

} }}

Java 二分法查詢

這學期學了資料結構這門課,這會都期末了才想起來更新部落格,所以我就來了,話不多說。如下 package com.vgbh public class binarysearch 二分法查詢必須是已經排序好的數列,且必須為正序,才可進行查詢 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢...

Java二分法查詢

前提 必須是有序的資料。基本思想 把乙個有序的資料乙份為二。然後判斷是比目標資料大了還是小了,如果小了往左邊的部分找 如果大了往右邊的資料找。確定了找的方向後再次把資料一分為二,繼續上面的步驟直到找到為止。涉及到了遞迴的思想。通俗的講 每次減少一半,然後確定方向,再次減少一半,直到找到為止。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...