資料結構基礎 2 順序查詢 二分查詢

2022-04-29 19:24:11 字數 1591 閱讀 3372

適用範圍:

沒有進行排序的資料序列

缺點:速度非常慢, 效率為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...