C++ 實現帶監(jiān)視哨的順序查找算法
監(jiān)視哨往往是程序里面的一個變量,如果是對數字排序的話,那么該變量一般是數值型變量。變量的賦值就相當于哨兵,當排序數列中出現與哨兵相等的值或有某種既定關系出現時,就做一種操作,比如說停止排序,或進行下一趟排序。
舉例:
順序檢索的算法描述如下
int Search_Sequen(SSTable ST,KeyType key){ //在線性表ST中順序檢索其關鍵字等于Key的數據元素, //若找到,函數值為該元素在表中的位置,否則為-1. ST.element[ST.length].key=key; //設置監(jiān)視哨 i=0; while(ST.element[i].key!=key) i++; if(i<ST.length) return i; else return -1; }
正文
之前在??途W上做習題發(fā)現的這個獨特的順序查詢,第一次聽到“監(jiān)視哨”這個說法,就查了一下
具體實現就是將數組的第0位置空,在查找時將要查找的key插入作為監(jiān)視哨
這樣的好處是不用每次循環(huán)都檢查查找是否結束,減少了元素比較次數,
最后的返回值要么是元素下標要么是數組第0位(這種情況就是到了監(jiān)視哨)
以下是我的代碼
#include <iostream> using namespace std; template<class T> int linear_search(T& arr,int key) { int length = sizeof(arr) / sizeof(arr[0]); int i = length; arr[0] = key; while (arr[i] != key) { i--; } return i; } int main() { int array[] = { 0, 7,9,10,11,15 }; int len = sizeof(array) / sizeof(array[0]); cout << linear_search(array, 10); return 0; }
這里順帶提一下,vs2019會出現一個
error C2760: 語法錯誤: 意外的令牌“標識符”,預期的令牌為“;”
的錯誤,具體原理我不是很懂,單給出一個解決辦法:
項目->屬性->C/C++->語言->符合模式->否
最后給自己提一下醒,數組作為函數參數是傳入數組首位的指針,指針是不帶有數組其他屬性的,
所以要在函數內獲得數組的長度,只能用引用和模板的形式傳入數組本身,這樣就能用sizeof()獲取數組長度了
總結
到此這篇關于C++ 實現帶監(jiān)視哨的順序查找的文章就介紹到這了,更多相關c++ 監(jiān)視哨順序查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++ LeetCode1775通過最少操作次數使數組和相等
這篇文章主要為大家介紹了C++ LeetCode1775通過最少操作次數使數組和相等,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12