前置知識
本期內容
名詞解釋
實現
- 沒有監視哨
- 若是每一個位置查詢機率同樣都是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
參考文獻
履歷