前置知识
本期内容
名词解释
实现
- 没有监视哨
- 若是每一个位置查询几率同样都是n\1,查找第i个元素时复杂度是(n-i+1),对它进行求和后再乘以概念n\1,结果是2(n+i),时间复杂度是0(n)
- 缺点是须要对i是否超过表长度进行判断
i<n
。
//length是顺序表长度,key是要找的关键字
int SeqSearch(int a[],int iLength,int iKey)
{
int i=0;
while(i<iLength&&a[i].key!=iKey)i++; //能够改为for,见参考1
if(i<iLength>) return i;
else return -1;
}
- 有监视哨
- 只是提升运算速度,但算法的比较次数没有改变,仍然是O(n)。
- 监视哨的做用,由于追加一个iKey到末尾的话,查找数据里确定有一个iKey,就不须要判断
i<n
了。
int SeqSearch(int a[],int iLength,int iKey)
{
int i=0;
a[iLength]=iKey; //把监视哨放在末尾,同时a的空间长度要大于iLength
while(a[i].key!=iKey)i++;
if(i<iLength>) return i;
else return -1;
}
整体评价
- 算法复杂度过高,无论是查找成功仍是失败,都要O(n),数据表越长时,缺点会致命。
- 适用场景比较多
代码学习
- chazhao.c 本地电脑里有
- chazhao1.c 本地电脑里有,但代码中直接在
main()
里数据源的最后一个追加了key
参考文献
履历