排序算法

最常用的排序算法:

冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。

按照时间复杂度可分为三类:

排序算法 时间复杂度 是否基于比较
冒泡、插入、选择 O(n2) Y
快排、归并 O(nlogn) Y
桶、计数、基数 O(n) N

排序算法的三个分析指标

排序算法的执行效率

一般从这几个方面来衡量:

1. 最好情况、最坏情况、平均情况时间复杂度

要分别给出最好情况、最坏情况、平均情况下的时间复杂度,并说出最好、最坏时间复杂度对应的要排序的原始数据是什么样的。

区分这三种时间复杂度的目的:

  1. 为了方便对比,所以都做一下区分。
  2. 要排序的数据,有的接近有序,有的完全无序。我们需要知道排序算法在不同数据下的性能表现。

2. 时间复杂度的系数、常数 、低阶

时间复杂度反应的是数据规模 n 很大的时候的一个增长趋势,它会忽略系数、常数、低阶。

但排序的是 1000 以内规模很小的数据,对同阶时间复杂度的排序算法性能对比的时候,应当把系数、常数、低阶也考虑进来。

3. 比较次数和交换(或移动)次数

基于比较的排序算法的执行过程,会涉及元素比较大小和元素交换或移动两种操作。

在分析排序算法的执行效率的时候,应该把比较次数和交换(或移动)次数也考虑进去。

排序算法的内存消耗