学弟讲数据结构·查找算法

顺序查找

  • 顺序查找也称为线形查找,属无序查找算法

  • 查找方式 : 从线性表一端开始顺序扫描,依次将扫描到的结点值与定值比较,若相等则查找成功;若扫描结束仍没有找到则查找失败。

  • 平均查找长度 : ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;

  • 时间复杂度 : O(n)

template<class T>
int sequenceSearch(vector<T> v,T value){
    for(int i = 0,size = v.size();i < size;i++){
        if(v[i] == value){
            return i;
        }
    }
    return -1;
}

二分查找

  • 待查找元素必须有序,若无序则先进行排序
  • 也称为折半查找,属有序查找算法
  • 查找方式 : 用给定值先与表中间结点值比较:若相等则查找成功;若定值小于中间值则继续查找表左半部分;否则查找表右半部分
template<class T>
int binarySearch(vector<T> v,T value){
    int left = 0;
    int right = v.size()-1;
    int mid;
    while(left <= right){
        mid = (left + right)/2;
        if(v[mid] == value){
            return mid;
        }
        if(v[mid] > value){
            right = mid - 1;
        }
        if(v[mid] < value){
            left = mid + 1;
        }
    }
    return -1;
}

猜你喜欢

转载自blog.csdn.net/qq_41452937/article/details/107483617