线性搜索算法

简介

  线性搜索算法又被称为顺序搜索算法,是一种暴力算法。主要是通过从头至尾开始逐个检举来确定所需数据的位置。
如果不在列表中则通过返回特殊值进行标记。

伪代码如下

  PS:在伪代码中以procedure标记一个程序的开始,其后说明程序的名字及具体参数,并且数组的下标从1开始。没有分号标记一个句子的结束,代码用行进行分割。

  procedure linear search(x: 整数, A1, A2, ..., An: 整数)
  i := 1
  while i <= n 和 x != A[i]
    i := i + 1
  if i <= n then location := i
  else location := 0
  return location {location 是等于x的项的下标,如果找不到x则是0}


C代码如下

int linearSearch(const int aim, const int array[], const int len)
{
    for(int i = 0; i != len; ++i)
    {
        if(array[i] == aim)
            return i;
    }
    return -1;
}

 

缺点

  • 普通的线性搜索算法只能够返回匹配的第一个位置,当列表中有多个数据匹配时就需要对代码进行更改。
  • 由于需要逐个进行匹配,所以效率比较低。
  • 算法效率不稳定。比如列表第一个数据就是匹配项,和列表无匹配项时所需要的运行时间相差较大。

算法复杂度

  • 最优情况下的时间复杂度

    当列表中的第一个数据就是待查找数据时,程序只需要进行2次比较,此时时间复杂度为Θ (1)。

  • 最坏情况下的时间复杂度

    当数据不在列表中时,就需要对所有的数据进行比较,需要2N+1次比较(N为数组的长度),此时时间复杂度为Θ (N)。

  • 平均情形下的时间复杂度

    当列表中的第一个数据就是待查找数据时,程序只需要进行2次比较,而第二个数据是待查找数据时,程序又需要进行2次比较,因此程序
     平均需要进行(2+4+6+8+...+2N)/N = N+1次比较。即Θ(N).

posted on 2016-10-27 21:36  DevinSuMi  阅读(4267)  评论(0编辑  收藏  举报