我知道这些算法的实现方式,但是不知道它们适用于哪些大小的数据集(以及包含哪些数据):
- 归并排序
- 冒泡排序(我知道,很少用)
- 快速排序
- 插入排序
- 选择排序
- 基数排序
我知道这些算法的实现方式,但是不知道它们适用于哪些大小的数据集(以及包含哪些数据):
首先,你需要丢弃所有时间复杂度为O(n2)
的排序算法。
然后,您需要研究多种排序算法的特性,并决定哪种算法更适合解决您想要解决的问题。最重要的是:
算法是否为原地算法?这意味着排序算法不使用任何(实际上是O(1)
的)额外内存。当您运行内存受限的应用程序时,此属性非常重要。
冒泡排序、插入排序和选择排序使用恒定的内存。归并排序也有一种原地变体。
算法是否稳定?这意味着如果两个元素x
和y
在给定比较方法的情况下相等,并且在输入中x
出现在y
之前,则在输出中x
将在y
之前找到。
归并排序、冒泡排序和插入排序是稳定的。
算法能否并行化?如果您构建的应用程序可以利用并行计算,则可能要选择可并行化的排序算法。
更多信息在此处。
请注意,通常合并或快速排序的实现会在子例程的部分使用插入排序,其中子数组非常小。