/*
**分治法:折半搜尋演算法 int* binary_search(int *p,int *q,int key);要求陣列已經排序。
**1 divide: 取中間節點r,分成兩個陣列[p,r),[r,q)
**2 conquer: 判斷*r和key的大小,若*r==key 返回,若*r>key,遞迴處理[p,r),否則遞迴處理[r+1,q)
**3 combine: do nothing
**特別注意遞迴終止的條件
**演算法複雜度: t(n)=t(n/2)+θ(1);a=1,b=2 n^logba=1 而f(n)=θ(1),所以t(n)=θ(lg n) 檢視主方法的介紹。
*/int* binary_search(int *p,int *q,int key);
int* binary_search(int *p,int *q,int key)
*/if(q==p)//說明p已經指向最後乙個元素的後面了,即沒有找到。
return null;
int *r=p+(q-p)/2; //r指向陣列的中間位置
int *result;
if(*r==key)
result=r;
result=binary_search(p,r,key);
result=binary_search(r+1,q,key);
return result;
} void bubblesort(int *array,int n)
} }
} int _tmain(int argc, _tchar* argv)
分治演算法 折半查詢法
二分查詢演算法根據邊界情況不同,一般可分為兩種情況,一中是左閉右開區間,類似於 left,right 一種是左閉右閉區間,在非遞迴二分中,必須遵守一定的區間規則,否則會造成程式錯誤,即區間不能夠重複。思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。題目描...
搜尋演算法 爬山法
一 爬山演算法 爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前位置的臨近空間中選擇乙個最優解作為當前解,直到達到乙個區域性最優解。爬山演算法可以模擬成乙個有失憶的人在濃霧中爬山。這裡就揭示了爬山演算法的兩個問題 失憶 就是說這個人不記得他去過什麼地方,他只記得他現在所處的位置,以及周邊的情...
搜尋演算法 爬山法
爬山法是深度優先搜尋的改進演算法。在這種方法中,使用某種貪心演算法來幫助我們決定在搜尋空間中向哪個方向搜尋。由於爬山法總是選擇往區域性最優的方向搜尋,所以可能會有 無解 的風險,而且找到的接不一定是最優解。但是他比深度優先搜尋的效率要高很多。主要的演算法描述如下 1 構造由根節點組成的1元棧。2 檢...