线性搜索 编辑

线性搜索线性搜索

比如说我有数组data,1000个元素,要从里面找x,线性搜索,就是从头找到尾,依次来看data是否等于x,如果不是data,data,依次类推,一直找到最后一个。速度最慢,但是适用性最广。

目录

算法步骤

编辑
procedurelinearsearch(x:整数,a1,a2,...,an:不同整数)

i:=1

while(i<=n&&x=/(不等于)ai)

i:=i+1

ifi<=nthenlocation:=i

elselocation:=0

{location是等于x的下标,或是0(找不到)}

最坏情况下使用O(n)次比较,2分搜索算法最坏情形复杂度O(logn)次比较,2分搜索算法比之线性搜索最坏情况下要好.

实例

编辑
int seqsearch(int list, int searchnum, int n)

{

int i;

list = searchnum; //把搜索值放到最后一个位置,简化代码

for(i = 0; list != searchnum; i++)

;

return ((i < n ) ? i : -1);

} 咱们考虑一个最基本的优化方法,就是把访问到的数据和第一个数据互换。

int seqsearch(int list, int searchnum, int n)

{

int i;

int ret = -1;

list = searchnum; //把搜索值放到最后一个位置,简化代码

for(i = 0; list != searchnum; i++)

;

if(i == 0) {

return 0;

}

if(i<n) {

int temp = list;

list = list;

list = temp;

ret = 0;

}

return ret;

}

这段代码把搜索到的记录和第一个记录互换,如果同一个记录连续被访问,那么只用做一次比较,提高了性能。但如果两个记录交互被访问,如1 2 1 2 1 2……,那么性能就会下降了。我们来看一个模拟LRU的代码:

int seqsearch(int list, int searchnum, int n)

{

int i;

int ret = -1;

list = searchnum; //把搜索值放到最后一个位置,简化代码

for(i = 0; list != searchnum; i++)

;

if(i==0)

return 0;

if(i<n) {

int temp = list;

int j;

for(j =i; j>0; j--)

list = list;

list = temp;

ret = 0;

}

return ret;

}

下一篇 冗余校验

上一篇 攻击