线性搜索算法


线性搜索算法

简介

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

伪代码如下

  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).


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM