11.查找---顺序查找及优化(“哨兵”优化)

/*
8.2.1 顺序表查找算法
顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键词
*/
int Sequential_Search(int *a, int n, int key)
{
    int i;
    for(i = 1; i<=n; i++)
    {
        if(a[i] == key)
            return i;
    }
    return 0;
}

/*
8.3.2 顺序表查找优化  
    “哨兵”模式,防止数组越界,极大的提高速度,很厉害的,不要小瞧他
    优化上边代码 a[i] 存在数组越界问题
    这种在查找方向的尽头放置“哨兵”免去了在查找过程中每一次比较后都要判断查找位置是否
    越界的小技巧,看似与原先差别不大,但在总数居较多时,效率提高很大,
    是非常好的编码技巧。当然,“哨兵”也不一定就一定要在数组开始,也可以在末端。
*/
int Sequential_Search2(int *a, int n, int key)
{
    int i;
    //设置a[0]为关键字值,我们称之为“哨兵”
    a[0] = key;
    //循环从数组尾部开始
    i=n;
    while(a[i] != key)
    {
        i--;
    }
    //返回0则说明查找失败
    return i;
}

 

你可能感兴趣的:(11.查找---顺序查找及优化(“哨兵”优化))