你好,我是悦创。
最近在给私教学员上课,临近考试。汇总常见的排序算法、查找算法定义、特点、缺点、时间复杂度等表格。
排序算法
算法类型 | 定义 | 特点 | 缺点 | 平均时间复杂度 | 最坏时间复杂度 | 最好时间复杂度 | 空间复杂度 |
---|---|---|---|---|---|---|---|
冒泡排序 | 通过重复遍历要排序的列表,比较每对相邻元素,若顺序错误则交换,直到无需再交换 | 实现简单,稳定排序 | 效率较低,尤其是在大数据集上 | O(n^2) | O(n^2) | O(n) | O(1) |
选择排序 | 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。 | 实现简单 | 效率低下,不稳定排序 | O(n^2) | O(n^2) | O(n^2) | O(1) |
插入排序 | 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 | 稳定排序,对于部分已排序数据效率较高 | 当输入序列为反向排序时性能最差 | O(n^2) | O(n^2) | O(n) | O(1) |
快速排序 | 从数列中挑出一个元素,作为"基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。 | 高效,适合大数据集 | 不稳定,递归深度大时消耗内存 | O(n log n) | O(n^2) | O(n log n) | O(log n) |
归并排序 | 采用分治法(Divide and Conquer),首先将问题分成一些小的问题然后递归解决,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。 | 稳定排序,适合大数据集 | 需要额外的内存空间 | O(n log n) | O(n log n) | O(n log n) | O(n) |
查找算法
算法类型 | 定义 | 特点 | 缺点 | 平均时间复杂度 | 最坏时间复杂度 | 最好时间复杂度 |
---|---|---|---|---|---|---|
线性查找 | 从数据结构中顺序地查找每一个元素,直到找到所需的特定元素或搜索到结构末尾。 | 实现简单 | 效率低,尤其是在数据集大的情况下 | O(n) | O(n) | O(1) |
二分查找 | 在有序的数组中,首先与中间的元素进行比较,如果目标值大于或小于中间元素,则在大于或小于中间元素的那半数组中查找,以此类推,递归进行,直到找到目标值。 | 快速查找速度 | 需要数据先进行排序,且只适用于数组 | O(log n) | O(log n) | O(1) |
哈希查找 | 通过哈希表,根据 |
关键字Key直接进行访问的数据映射算法,以空间换时间。 | 查找速度极快,适合频繁查找 | 哈希表的构造复杂,冲突处理可能增加时间成本 | O(1) | O(n) | O(1) |
这些是常见的排序和查找算法的基本信息,可以根据具体需求选择合适的算法进行实现。
更多优质内容,查阅AI悦创官网:https://bornforthis.cn/
文章评论