分治演算法 二分搜尋

2021-07-04 07:26:04 字數 1179 閱讀 7339

一.演算法簡介

以有序表表示靜態查詢表時,查詢函式可以用二分查詢(binary search

orhalf-intervalsearch)來實現。這種演算法基於分治。

二.複雜度分析

二分查詢的時間複雜度是

o(log(n))

,最壞情況下的時間複雜度是

o(n)

三.演算法思想及步驟

二分查詢(binary search

orhalf-interval search)的查詢過程是:先確定待查記錄所在的區間,然後逐步縮小區間直到找到或找不到該記錄為止。

假設 low 指向區間下界,high 指向區間上界,mid 指向區間的中間位置,則 mid  = (low + high) / 2; 

具體過程:

1.先將關鍵字與 mid 指向的元素比較,如果相等則返回mid。

2.關鍵字小於 mid 指向的元素關鍵字,則在 [ low, mid-1 ]區間中繼續進行二分查詢。 

3.關鍵字大於mid 指向的元素關鍵字,則在[ mid +1 ,high] 區間中繼續進行二分查詢。

偽碼如下

int binary_search(int a, int key, int imin, int imax)

}

int binary_search(int a, int key, int imin, int imax)

// key was not found

return key_not_found;

}

四.c**

#include#includeint cmp(const void*a,const void*b)

int binery_search(int *a,int aim,int l,int r)

else if(a[mid]%d\taim->%d\n",item,aim);

return 0;

}

分治法 二分搜尋

二分搜尋技術是利用分治法思想的的典型例子 問題描述 給定已經排好序的n個元素a 0 n 1 要在這n個元素中找出乙個特定元素x的下標 首先比較容易想到的是遍歷這個n個元素,依次尋找,這樣做的話,最壞情況下需要做n次比較,時間複雜度為o n 這種方法沒有很好的利用排序這個性質。其次就是二分搜尋技術,二...

分治法 二分搜尋

問題描述 又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。package fenzi public c...

分治法 二分搜尋BinarySearch

問題描述 給定乙個數字,再給n個數字,要從這n個數找出這個給定的數字,最壞的情況,如果乙個乙個找,要猜n次才能成功。其實我們沒有必要乙個乙個猜 因為這些數字是有限的而且是有序的 我們給它們排個序 這是乙個典型的二分搜尋問題。我們可以用折半查詢的策略,每次和中間的元素比較,如果比中間的元素小,那麼要查...