线性搜索
何为线性搜索?
线性搜索是最简单的一种查找方法。
比如你有一个保存了元素的数组:
你需要查找某个元素 key 是否在其中,是的话位置在哪。
正常人(包括我)一般情况下的写法是:
int search1(int key)
{
for(int i=0; i<N; i++)
{
if(text[i]==key)return i;
}
return -1;
}
代码应该不难理解。就遍历整个数组,然后看看有没有元素与他相同,返回第一个相同元素下标或-1.
然后今天才发现可以优化:
优化代码:
int search2(int key)
{
text[N]=key;
int i=0;
while(text[i]!=key)
{
i++;
}
return i!=N;
}
稍微解释一下:
也是遍历整个数组,不过稍微不同的是,最开始在数组后面加一个“记号”,即把自己存到了数组最后一个元素的后面。
那这样的话,如果我遍历后发现 i 跑到了这里,说明前面没有要查找的元素,否则说明有。
那为什么会比 search1 快呢?
search1 可以改写成这样子(图右)。