20180312順序查找

前置知識

本期內容

名詞解釋

  • (Sequential Search)略

實現

  • 沒有監視哨
    • 若是每一個位置查詢機率同樣都是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

參考文獻

  • 查找——順序查找 裏面用的是for循環
  • 順序查找(Sequential Search) 把a[0]給設置爲監察哨,不是把以前的給覆蓋了嗎?雖然能夠從後往前找,這裏面i的值也不是元素長度的最大值啊
    • 裏面提到的根據不一樣的查找機率進行結點交換,能夠說是個好思路。

履歷

  • 20180312初版寫完,也基本理解這個算法了。
相關文章
相關標籤/搜索