1. 程式人生 > >順序表查詢設定哨兵

順序表查詢設定哨兵

既高階又俗氣的名字:哨兵

哨兵用於順序表查詢,所謂“哨兵”就是用一個特殊值來作為陣列的邊界,使用“哨兵”可以少用一條判斷語句(少了i<n這句),所以可以提高程式的效率。

//普通查詢程式碼
int Search_1(int *a,int n,int key)
{
    int i;
    for(int i=0; i<n; i++)
    {
        if(a[i]==key)
            return i;
    }
    return 0;//查詢失敗
}

//帶哨兵查詢程式碼
int Search_2(int *a,int n,int key)
{ int i=0; a[0]=key;//哨兵 i=n; while(a[i]!=key) { i--; } return i;//返回0就是查詢失敗 }

沒用“哨兵”,兩條判斷:i<n;和if(a[i]==key)
用了“哨兵”,一條判斷:while(a[i]!=key)