二分查詢法

2021-10-03 18:47:13 字數 1113 閱讀 3554

假如有一組數為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)。因為a[mid]>x,故應在前半段中查詢。

2.令新的end=mid-1=2,而front=0不變,則新的mid=1。此時x>a[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。

演算法複雜度分析編輯

時間複雜度

1.最壞情況查詢最後乙個元素(或者第乙個元素)master定理t(n)=t(n/2)+o(1)所以t(n)=o(log2n)

2.最好情況查詢中間元素o(1)查詢的元素即為中間元素(奇數長度數列的正中間,偶數長度數列的中間靠左的元素)

空間複雜度

s(n)=logn

public

class 二分查詢法

if(value(value>array[mid])}

return-1

;}public

static

void

main

(string[

] args)

;int value =

binary

(a,9);

system.out.

println

(value);}

}

二分查詢法

二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢法的優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者...

二分查詢法

有序陣列中的find 方法 public int find long serchkey int lowerbound 0 int upperbound nelems 1 while true curin lowerbound upperbound 2 if a curin serchkey retu...

二分查詢法

演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止...