之前在牛客網上做習題發現的這個獨特的順序查詢,第一次聽到“監視哨”這個說法,就查了一下
具體實作就是將陣列的第0位置空,在查找時將要查找的key插入作為監視哨
這樣的好處是不用每次回圈都檢查查找是否結束,減少了元素比較次數,
最后的回傳值要么是元素下標要么是陣列第0位(這種情況就是到了監視哨)
以下是我的代碼
1 #include <iostream> 2 using namespace std; 3 4 template<class T> 5 int linear_search(T& arr,int key) 6 { 7 int length = sizeof(arr) / sizeof(arr[0]); 8 int i = length; 9 arr[0] = key; 10 while (arr[i] != key) 11 { 12 i--; 13 } 14 return i; 15 } 16 17 int main() 18 { 19 int array[] = { 0, 7,9,10,11,15 }; 20 int len = sizeof(array) / sizeof(array[0]); 21 cout << linear_search(array, 10); 22 return 0; 23 }
這里順帶提一下,vs2019會出現一個
error C2760: 語法錯誤: 意外的令牌“識別符號”,預期的令牌為“;”
的錯誤,具體原理我不是很懂,單給出一個解決辦法:
專案->屬性->C/C++->語言->符合模式->否
最后給自己提一下醒,陣列作為函式引數是傳入陣列首位的指標,指標是不帶有陣列其他屬性的,
所以要在函式內獲得陣列的長度,只能用參考和模板的形式傳入陣列本身,這樣就能用sizeof()獲取陣列長度了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49347.html
標籤:C++
