设置了监视哨的顺序查找算法效率高?你确定吗?

【问题描述】
严蔚敏教授在《数据结构(C语言版 第2版)》中的顺序查找一节中提到“当元素个数≥1000时,
设置有监视哨的顺序查找算法,比未设监视哨的顺序查找算法,进行一次查找所需的平均时间几乎减少一半”。

【实验验证】
针对上述表述,我写了如下代码进行验证。但是发现,上述表述并
不正确。因为实验验证的结果表明,有无设置监视哨,顺序查找算法所需的平均时间相当。分析原因,可能在于作者在写这本书的时候,计算机硬件的发展水平不高,而现在计算机硬件获得高速发展的原因。

【一点建议】
建议在改版时,将上述表述删掉,以适应新发展。

【算法代码】

#include<bits/stdc++.h>
using namespace std;

const long long int maxn=200000000;
int a[maxn];
clock_t stp,enp; //start point, end point

int seqSearch(int *a,int n,int key) {
    for(int i=n; i>=1; i--) {
        if(a[i]==key) return i;
    }
    return 0;
}

int sentrySearch(int *a,int n,int key) {
    a[0]=key;
    int i;
    for(i=n; a[i]!=key; i--){};
    return i;
}

int main() {
    for(int i=0; i<maxn; i++) a[i]=i;

    stp=clock();
    cout<<seqSearch(a,maxn,123456789)<<endl;
    enp=clock();
    cout<<(double)(enp-stp)/CLOCKS_PER_SEC<<"s"<<endl;

    stp=clock();
    cout<<sentrySearch(a,maxn,123456789)<<endl;
    enp=clock();
    cout<<(double)(enp-stp)/CLOCKS_PER_SEC<<"s"<<endl;

    return 0;
}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值