二分法學習筆記

2021-08-26 17:09:06 字數 1549 閱讀 1351

當資料量很大適宜採用該方法。採用二分法查詢時,資料需是排好序的。

基本思想:假設資料是按公升序排序的,對於給定值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。

[一維陣列,折半查詢]

c**:

int search(int *a,int key,int low,int high)      int main()   ;   int i = search(a,99,0,sizeof(a)/sizeof(a[0])-1);   cout << i << endl;   return 0;   }

c++**:#include#define n 10   using namespace std;   int main()      if(a[mid]!=x)   cout<<"沒找到!"<

二分法學習筆記

當資料量很大適宜採用該方法。採用二分法查詢時,資料需是排好序的。基本思想 假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功 若x小於當前位置值,則在數列的前半段中查詢 若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。演算法 假如有一組數為...

ACM二分法學習小結

1 二分查詢 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。2 二分查詢的基本思想 二分查詢的基本思想是 1 首先確定該區間的中點位置 2 然後將待查的k值與r mid key比較 若相...

演算法學習 二分法

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法,前提是資料結構必須先排好序,可以在資料規模的對數時間複雜度內完成查詢。但是,二分查詢要求線性表具有有隨機訪問的特點 例如陣列 也要求線性表能夠根據中間元素的特點推測它兩側元素的性質,以達到縮減問題規模的效果。舉個簡單的例子...