順序查詢
適用範圍:
沒有進行排序的資料序列
缺點:速度非常慢, 效率為o(n)
[cpp] view plain copy 在code上檢視**片派生到我的**片
//實現
template
type *sequencesearch(type *begin, type *end, const type &searchvalue)
throw(std::range_error)
return end;
} template
type *sequencesearch(type *array, int length, const type &searchvalue)
throw(std::range_error)
迭代二分查詢
應用範圍:
資料必須首先排序,才能應用二分查詢;效率為(logn)
演算法思想:
譬如陣列,查詢元素6,用二分查詢的演算法執行的話,其順序為:
1.第一步查詢中間元素,即5,由於5<6,則6必然在5之後的陣列元素中,那麼就在中查詢,
2.尋找的中位數,為7,7>6,則6應該在7左邊的陣列元素中,那麼只剩下6,即找到了。
二分查詢演算法就是不斷將陣列進行對半分割,每次拿中間元素和目標元素進行比較。
[cpp] view plain copy 在code上檢視**片派生到我的**片
//實現:迭代二分
template
type *binarysearch(type *begin, type *end, const type &searchvalue)
throw(std::range_error)
return end;
} template
type *binarysearch(type *array, int length, const type &searchvalue)
throw(std::range_error)
遞迴簡介
遞迴就是遞迴...(自己呼叫自己),遞迴的是神,迭代的是人;
遞迴與非遞迴的比較
[cpp] view plain copy 在code上檢視**片派生到我的**片
//遞迴求解斐波那契數列
unsigned long ficonaccirecursion(int n)
[cpp] view plain copy 在code上檢視**片派生到我的**片
//非遞迴求解斐波那契數列
unsigned long ficonacciloop(int n)
return ans;
} 遞迴二分查詢
演算法思想如同迭代二分查詢;
[cpp] view plain copy 在code上檢視**片派生到我的**片
//實現
template
type *binarysearchbyrecursion(type *front, type *last, const type &searchvalue)
throw(std::range_error)
return null;
} template
int binarysearchbyrecursion(type *array, int left, int right, const type &searchvalue)
throw (std::range_error)
return -1;
} 小結:
其實c++ 的stl已經實現好了std::binary_search(),在用的時候我們只需呼叫即可, 但是二分演算法的思想還是非常重要的, 在求解一些較為複雜的問題時, 我們時常能夠看到二分的身影.
順序查詢 二分查詢 索引查詢
1.查詢技術的分類。如下圖 2.什麼是順序查詢呢?無序表 順序查詢的原理很簡單,就是遍歷整個列表,逐個進行記錄的關鍵字與給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄。如果直到最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢失敗。時間複雜度是o n 3....
順序查詢與二分查詢
先上 include void printarr int a,int n void bublesort int a,int n void swap int a,int b int binarysearch int a,int n,int k int normalsearch int a,int n,...
順序查詢和二分查詢
二分查詢 陣列裡查詢某個元素 search函式 其中 array為陣列,k為要找的值,low為查詢範圍的最小鍵值,high為查詢範圍的最大鍵值 function search array,k,low 0,high 0 if low high 如果還存在剩餘的陣列元素 elseif k array m...