C/C++培训
达内IT学院
400-996-5531
这篇文章主要介绍了C++ 实现带监视哨的顺序查找算法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。
监视哨往往是程序里面的一个变量,如果是对数字排序的话,那么该变量一般是数值型变量。变量的赋值就相当于哨兵,当排序数列中出现与哨兵相等的值或有某种既定关系出现时,就做一种操作,比如说停止排序,或进行下一趟排序。
举例:
顺序检索的算法描述如下
int Search_Sequen(SSTable ST,KeyType key){
//在线性表ST中顺序检索其关键字等于Key的数据元素,
//若找到,函数值为该元素在表中的位置,否则为-1.
ST.element[ST.length].key=key; //设置监视哨
i=0;
while(ST.element[i].key!=key) i++;
if(i<ST.length)
return i;
else
return -1;
}
正文
之前在牛客网上做习题发现的这个独特的顺序查询,第一次听到“监视哨”这个说法,就查了一下具体实现就是将数组的第0位置空,在查找时将要查找的key插入作为监视哨,这样的好处是不用每次循环都检查查找是否结束,减少了元素比较次数,最后的返回值要么是元素下标要么是数组第0位(这种情况就是到了监视哨)
以下是我的代码
#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++ 实现带监视哨的顺序查找的文章就介绍到这了,更多相关c++ 监视哨顺序查找内容还请关注本站!
当你还在担心能否就业时,达内学员提前被企业录取;当你转辗于各大招聘会时,达内学员收到了高薪offer;当你在各大招聘网站投递简历时,达内学员中有人一毕业进入五百强名企。所以选择很重要。找C++培训班,选达内就对了。
版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved