你好,我是悦创。
最近在给私教学员上课,临近考试。汇总常见的排序算法、查找算法定义、特点、缺点、时间复杂度等表格。

排序算法

算法类型

定义

特点

缺点

平均时间复杂度

最坏时间复杂度

最好时间复杂度

空间复杂度

冒泡排序

通过重复遍历要排序的列表,比较每对相邻元素,若顺序错误则交换,直到无需再交换

实现简单,稳定排序

效率较低,尤其是在大数据集上

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) |

这些是常见的排序和查找算法的基本信息,可以根据具体需求选择合适的算法进行实现。