一、顺序查找
条件:无序或有序队列。
原理:按顺序将查找元素与每个元素比较,直到找到查找元素为止。
时间复杂度:O(n)

int SequenceSearch(int arr[], int value, int n)
{int i;for(i = 0; i < n; i++)if(arr[i] == value)return i;return -1;
}

二、二分查找(折半查找)
条件:有序数组
原理:
查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
如果查找元素大于(小于)中间元素,则在数组大于(小于)中间元素的那一半区间中查找,而且跟开始一样从中间元素开始比较。
如果在某一步骤数组为空,则代表找不到。
这种搜索算法每一次比较都使搜索范围缩小一半。
时间复杂度:O(logn)

int BinarySearch(int arr[], int value, int n)
{int low = 0;int high = n-1;int mid;while(low <= high){mid = (low + high) / 2;if(arr[mid] == value)return mid;else if(arr[mid] > value)high = mid - 1;//区间新终点elselow = mid + 1; //区间新起点}
return -1;
}
//递归版
int BinarySearch(int arr[], int value, int low, int high)
{int mid = low + (high - low) / 2;if(arr[mid] == value)return mid;else if(arr[mid] > value)return BinarySearch(a, value, low, mid - 1);elsereturn BinarySearch(a, value, mid + 1, high);
}

三、二叉排序树查找
条件:先创建二叉排序树,其性质:
   1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3. 它的左、右子树也分别为二叉排序树。
原理:
在二叉查找树B中查找key的过程为:
   1. 若B是空树,则搜索失败,否则:
2. 若key等于B的根节点的数据域之值,则查找成功;否则:
3. 若key小于B的根节点的数据域之值,则递归查找左子树;否则:
4. (key大于B的根节点的数据域之值)递归查找右子树
时间复杂度:O(log2(n))

//树结点
typedef struct tNode
{int tdata;tNode *lchild;   //指向左孩子结点tNode *rchild; //指向右孩子结点
}*PTRNODE//插入算法即二叉查找树的构建/生成,插入key到合适位置
void tInsert(PTRNODE &tp, int key)
{if (NULL == tp){tp = new tNode;tp->tdata = key;tp->lchild = tp->rchild =NULL;}else if (key < tp->tdata){tInsert(tp->lchild, key);}else{tInsert(tp->rchild, key);}
}//查找算法
void tSearch(PTRNODE &tp, int key)
{if (NULL == tp){cout<<"Error\n未找到与关键字 \""<<key<<"\" 相匹配的数据元素"<<endl;return;}if (key < tp->tdata){//打印访问路径cout<<tp->tdata<<"->";tSearch(tp->lchild, key);}else if(key > tp->tdata){cout<<tp->tdata<<"->";tSearch(tp->rchild, key);}else //查找成功{cout<<tp->tdata<<endl;}
}

C++常用查找

四、平衡二叉树查找(红黑树)

五、B/B+树查找

六、哈希表法(散列表)
条件:先创建哈希表(散列表),可能是数组实现
原理:根据键值方式(Key value)进行查找,通过散列函数,定位数据元素。
时间复杂度:几乎是O(1),取决于产生哈希冲突的多少。

王道考研

常见散列函数:
1)除余法:H(key) = key%p,p是不大于表长的质数(素数)
2)直接定址发:H(key) = a*key+b

哈希冲突解决:不同key的H(key)相同
1)开放地址法:探测可用位置
2)链接地址法:相同哈希值的多个关键字存放在同个地址的链表里
3)桶地址:相同哈希值的多个关键字存放在同个地址的桶里

查找算法及其时间复杂度相关推荐

  1. python二分查找时间复杂度_二分查找算法的时间复杂度计算(logN)

    二分查找算法的时间复杂度计算(logN) 马富天 2019-08-10 20:25:24 54 [摘要]二分查找算法是对顺序查找算法的优化,二分查找算法的前提是数列是一个有序数列,递增或者递减,本文就 ...

  2. “二分查找”算法的时间复杂度

    算法的时间复杂度无非就是for.while等包含起来的基本运算单元的循环次数 1.二分查找 二分查找(binary search),也称作折半查找(half-interval search),每次划分 ...

  3. 二分查找算法及其变种

    前言 二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法.其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功:若给定的值小于中间记录的 ...

  4. 【大话数据结构算法】查找算法

    顺序查找 针对无序序列的一种最简单的查找方式. 算法思想: 从表中第一个记录开始,逐个与给定值进行比较,若某个记录的关键字和给定值相等,则查找成功:反之,若直到最后一个记录,其关键字和给定值都不相等, ...

  5. tail -f 查找关键字_C语言九种查找算法 | 总有一款适合你

    时间.空间复杂度比较 查找算法 平均时间复杂度 空间复杂度 查找条件 顺序查找 O(n) O(1) 无序或有序 二分查找(折半查找) O(log2n) O(1) 有序 插值查找 O(log2(log2 ...

  6. list 查找_五千字长文带你学习 二分查找算法

    点击上方"与你一起学算法",选择"星标"公众号 重磅干货,第一时间送达 二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使 ...

  7. 【数据结构】查找算法

    文章目录 查找算法 顺序查找算法 折半查找 分块查找 二叉排序树 平衡二叉树(AVL树) 散列表 哈希函数的构造 处理冲突的方法 哈希查找算法及其实现 查找算法 查找:在数据集合中寻找满足某种条件的数 ...

  8. 顺序,二分,插值,斐波那契 查找算法

    总结: 博客详细描述:(http://www.cnblogs.com/maybe2030/p/4715035.html#_label4) 关注: 二分查找.插值查找以及斐波那契查找都可以归为一类插值查 ...

  9. 找呀找呀找对象(Python查找算法汇总)

    是否还在为如此优秀的你还没有对象而愁掉了头发,是否还在依赖OOP来new出一个对象.其实这个世界缺少的不是对象,而是发现对象的眼睛.当然如此优秀的你也可能只是缺少时间. 本文简要分析4中查找算法,看看 ...

最新文章

  1. linux下有关phy的命令,linux – 如何为Debian安装b43-lpphy-installer?
  2. Java基础概念性的知识总结
  3. 3d卷积神经网络_HSNets:使用卷积神经网络从2D轮廓预测3D人体模型
  4. linux下安装nginx详细步骤_mac下安装nginx
  5. SAP在快速消费品行业中的实施方案
  6. .net core 集成 autofac.
  7. Leet Code OJ 28. Implement strStr() [Difficulty: Easy]
  8. Linux 笔记 - 第九章 Linux 中软件的安装
  9. 华为云实时数据处理“三剑客”
  10. VB讲课笔记09:过程
  11. 抢那么多封面,有那么多钱发红包吗?
  12. python gmm em算法 2维数据_AI大语音(六)——混合高斯模型(GMM)(深度解析)...
  13. update set命令用来修改表中的数据
  14. 交叉编译工具arm-linux-gccarm-elf-gcc下载地址全集
  15. laravel 理论
  16. 高德地图导航简单实例
  17. JAVA版本8u171与8u172的区别
  18. 优雅草YYC松鼠短视频2022年12月28日更新v5.1.6版本更新·修复因为消息提醒二开导致菜单栏无法显示·进一步完善推送
  19. HTML5期末大作业:音乐网站设计——html5在线音乐新闻发布会网站模板(滚动页) HTML+CSS+JavaScript
  20. 华为快应用_IDE:如何使用真机预览

热门文章

  1. FPGA乒乓球(碰碰球)游戏设计
  2. 移动电影院的未来在哪里
  3. Java打印输出:在线天堂
  4. Python爬虫——手把手教你爬取王者荣耀英雄皮肤
  5. 自助旅游系统c语言编程,一个简单的导游程序
  6. 服务器 监控信息 怎么看,服务器 监控信息 怎么看
  7. EM算法实例及python实现
  8. HMI-20-[刷新问题]解决界面刷新卡顿问题
  9. Arduino编程-步进电机角度控制
  10. : could not determine a constructor for the tag !RootAdmin