本博客整理了当前经典的搜索算法的实现,并进行了简单的分析;博客中所有的代码实现位于:https://github.com/yaowenxu/codes/tree/master/搜索算法 ; 如果代码对您有帮助,希望能点击star~基于推荐和鼓励!感谢~

基本概念: 

  • 搜索:就是在指定结构内,找到满足条件的关键字;这个结构可以是查找表结构,也可以是树结构也可以是图结构;
  • 查找表:带有相同种类键值的元素所构成的集合;
  • 关键字:元素中的某一项数字和标识,一个数据可以有很多关键字,可以通过多种维度来进行搜索;
  • 主键:可以用来唯一标识数据或者记录的关键字;
  • 静态查找表:查询某个特定的元素是否在表中;只做查找操作,查找过程中集合中的数据不发生变化;
  • 动态查找表:在查找过程中,同时进行插入或者删除数据;
  • 内查找:全部过程中都在内存中进行,为内查找;
  • 外查找:全部过程中需要访问外存,为外查找;
  • 性能评价:ASL(Average Search Length),平均比较长度;表示在查找过程中对关键字的需要执行的平均比较长度(平均比较次数),来进行评价算法性能优劣;
  • 查找算法选取:判断当前数据的组织结构,是线性表还是树结构还是图结构;如果是顺序表,还要考虑表格中的数据是否有序;

顺序查找:顺序查找的思想是从左到右依次进行扫描比较,如果满足指定的查找条件则查找成功,若到末尾还未找到,则数组中无满足结构,适合与线性表;数据可以有序也可以无序;

#define DEBUG 1
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
void printarray(vector<int> &arr);

void seqsearch(vector<int> &arr, int v=500){
    cout << "开始查找数据:" << v << endl;
    bool flag =  true;
    for (int i = 0; i < arr.size(); i++)
    {
        if(arr[i] == v){
            cout << "满足索引:" << i << endl;
            flag = false;
        }
    }
    if (flag)
    {
        cout << "无满足数据!" << endl;
    }
}

// 打印函数;
void printarray(vector<int> &arr){
    for(int i = 0; i < arr.size(); i++){
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main(){
    vector<int> arr; 
    freopen("in.txt", "r", stdin); // 重定向到输入 
    int i = 0; 
    int tmp; 
    while (cin >> tmp)
    {   
        arr.push_back(tmp);
        // cout << inarray[i] << endl;
        i++;
    }
    int num =  i;
    cout << "输入数据:" << endl;
    printarray(arr);
    cout << endl;
    if (DEBUG){
        cout << "查找过程:" << endl;
    }

    // 顺序查找
    seqsearch(arr);
    return 0;
}
顺序查找算法模板

相关文章: