【问题描述】
严蔚敏教授在《数据结构(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;
}