適用範圍:
沒有進行排序的資料序列
缺點:速度非常慢, 效率為o(n)
//實現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,即找到了。
二分查詢演算法就是不斷將陣列進行對半分割,每次拿中間元素和目標元素進行比較。
//實現:迭代二分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)
遞迴就是遞迴...(自己呼叫自己),遞迴的是神,迭代的是人;
遞迴與非遞迴的比較
//遞迴求解斐波那契數列unsigned long ficonaccirecursion(int n)
//非遞迴求解斐波那契數列unsigned long ficonacciloop(int n)
return ans;
}
演算法思想如同迭代二分查詢;
//實現小結: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(),在用的時候我們只需呼叫即可, 但是二分演算法的思想還是非常重要的, 在求解一些較為複雜的問題時, 我們時常能夠看到二分的身影.
資料結構(順序查詢 二分查詢 分塊查詢)
一 查詢 概念 給定乙個值k,在含有n個記錄的檔案中進行搜尋,尋找乙個關鍵字值等於k的記錄,如找到則輸出該記錄,否則輸出查詢不成功的資訊。二 靜態查詢表 順序查詢 2 折半查詢 折半查詢比順序查詢的效率要高,但它要求查詢表進行順序儲存並且按關鍵字有序排列,因此對錶進行元素的插入和刪除時,需要移動大量...
資料結構複習 2 線性查詢,二分查詢
所用陣列參考上一章 資料結構複習 1 myarraylist 線性表 線性查詢 有則返回下標,否則返回 1 param element return public intsearch int element return 1 非遞迴 二分查詢,有則返回下標,否則返回 1 param element ...
資料結構基礎 5 二分查詢
include include include include int binary serch int arr,int arr len,int value else if value arr m else return 1 int main int argc,char argv for pos 0...