C++ 实现带监视哨的顺序查找算法

 更新时间:2020年03月26日 15:21:13   作者:ddl是第一生产力  
这篇文章主要介绍了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++ 监视哨顺序查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Swift编程中的泛型解析

    Swift编程中的泛型解析

    这篇文章主要介绍了Swift编程中的泛型解析,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • 基于C语言实现学生成绩管理系统

    基于C语言实现学生成绩管理系统

    这篇文章主要介绍了基于C语言实现学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Matlab绘制酷炫坐标区域的方法详解

    Matlab绘制酷炫坐标区域的方法详解

    这篇文章主要为大家详细介绍了如何利用Matlab编写一个能让坐标区域变得很炫酷的修饰函数,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-05-05
  • 解决VC++编译报错error C2248的方案

    解决VC++编译报错error C2248的方案

    这篇文章主要介绍了解决VC++编译报错error C2248的方案的相关资料,需要的朋友可以参考下
    2015-11-11
  • C++调用tensorflow教程

    C++调用tensorflow教程

    今天小编就为大家分享一篇关于C++调用tensorflow教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • c语言中全局变量的设置方式

    c语言中全局变量的设置方式

    这篇文章主要介绍了c语言中全局变量的设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 利用C++ OpenCV 实现从投影图像恢复仿射特性

    利用C++ OpenCV 实现从投影图像恢复仿射特性

    我们通过相机拍摄的图片存在各种畸变,其中投影畸变使得原本平行的直线不再平行,就会产生照片中近大远小的效果。本文将具体介绍如何利用OPenCV实现从投影图像恢复仿射特性,接下来跟着小编一起学习吧
    2021-11-11
  • C++菱形继承及解决方法详解

    C++菱形继承及解决方法详解

    这篇文章主要介绍了C++菱形继承及解决方法详解,在多继承结构中,存在着很多问题,比如从不同基类中继承了同名成员,派生类中也定义了同名成员,这种二义性问题很好解决,加上要访问的基类的类名限制就可以了,需要的朋友可以参考下
    2023-08-08
  • C++ LeetCode1775通过最少操作次数使数组和相等

    C++ LeetCode1775通过最少操作次数使数组和相等

    这篇文章主要为大家介绍了C++ LeetCode1775通过最少操作次数使数组和相等,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • c++ 有趣的动态转换

    c++ 有趣的动态转换

    这篇文章主要介绍了c++ 动态转换的相关资料,帮助大家更好的理解和使用c++编程,感兴趣的朋友可以了解下
    2020-09-09

最新评论