-
线性搜索 编辑
比如说我有数组data,1000个元素,要从里面找x,线性搜索,就是从头找到尾,依次来看data是否等于x,如果不是data,data,依次类推,一直找到最后一个。速度最慢,但是适用性最广。
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 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;
}
1、本站所有文本、信息、视频文件等,仅代表本站观点或作者本人观点,请网友谨慎参考使用。
2、本站信息均为作者提供和网友推荐收集整理而来,仅供学习和研究使用。
3、对任何由于使用本站内容而引起的诉讼、纠纷,本站不承担任何责任。
4、如有侵犯你版权的,请来信(邮箱:baike52199@gmail.com)指出,核实后,本站将立即删除。