之前在牛客网上做习题发现的这个独特的顺序查询,第一次听到“监视哨”这个说法,就查了一下
具体实现就是将数组的第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.cnblogs.com/misaki-workshop/p/12574360.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194861
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!