C语言关于卫兵顺序查找的疑问

C语言关于哨兵顺序查找的疑问?
int Sequential_Search2(int *a ,int n,int key)
{
    int i=0;
    a[0]=key;//哨兵
    i=n;
    while(a[i]!=key)
    {
        i--;
    }
    return i;//返回0就是查找失败
}


假设这个数组为 va[4] = {7,4,3,2,1,} 要查找的值是5;那么va[0]  = key不是等于赋值了吗?这样还怎么查找呢?

------解决思路----------------------
就是赋值了,这样就保证在数组里面的查找的时候一定能找到。
由于是从后向前找的,如果数组里面本身有要找的值,找到的值的位置是大于 0 的。如果一直到 a[0] 才找到要找的值,说明从 1~n 都没有要找的值,就是数组里面没有。

------解决思路----------------------
引用:
Quote: 引用:

就是赋值了,这样就保证在数组里面的查找的时候一定能找到。
由于是从后向前找的,如果数组里面本身有要找的值,找到的值的位置是大于 0 的。如果一直到 a[0] 才找到要找的值,说明从 1~n 都没有要找的值,就是数组里面没有。
那要是va[0]本身就是要查找的值呢? 比如va[4] = {5,4,3,2,1} 要查找的值key为5;这样的话不就错了么

这种方法表明,你要把数组元素的值放到下标1...n的位置上,而不是0...n-1,a[0得空出来,用于存放哨兵。