顺序查找

顺序查找

  1. 算法思想
  2. 算法实现
  3. 算法优化

顺序查找的算法思想

顺序查找,又叫“线性查找”,通常用于线性表

从头到尾查

顺序查找的实现

typedef struct{			//查找表的数据结构(顺序表)
    ElemType *elem;		//动态数组的基址
    int TableLen;		//表的长度
}SSTable;

//顺序查找
int Serach_Seq(SSTable ST,ElemType key){
    int ;
    for(i=0;i<ST.TableLen && ST.elem[i] != key;++i); 
    //查找成功,则返回元素下标;查找失败,则返回-1
    return i == ST.TableLen ? -1 : i;
}

顺序查找的实现(哨兵)

typedef struct{
    ElemType *elem;
    int TableLen;
}

//顺序查找
int Search_Seq(SSTable ST,ElemType key){
    ST.elem[0] = key;			//哨兵
    int i;
    for(i=ST.TableLen;ST.elem[i]!=key;--i);
    return i;
}

优点:无需判断是否越界,效率更高。

查找效率分析

顺序查找的优化(对有序表)

共有n+1种查找失败的情况

[ASL_{失败} = frac{1+2+3+...+n+n}{n+1} = frac{n}{2}+frac{n}{n+1} ]

用查找判定树分析ASL

顺序查找的优化(被查概率不相等)

把被查找概率大的放在前面。

知识回顾

{{uploading-image-757343.png(uploading...)}}

原文地址:https://www.cnblogs.com/jev-0987/p/13307719.html