前言
接下来就开始我们的算法学习之路了,代码会分别使用Java与Python来实现,数据处理的算法很多,排序是最基础且最重要的一类,大多数人都是通过学习排序算法入门的。接下来让我们一起学习闻名遐迩的十大排序算法,它们分别是冒泡排序、快速排序、直接插入排序、希尔排序、简单选择排序、堆排序、归并排序、计数排序、桶排序和基数排序。这十大排序算法可以大致为两类:非线性时间比较类排序和线性时间非比较类排序,如下图所示。
所谓线性时间并不是“按照时间顺序讲述故事”的方式,而是与时间复杂度相关的词条。在计算复杂性理论中,如果实现某算法所需要的时间与输入数据的大小成正比的线性关系,则教该算法为线性时间的算法,或者 O ( n ) O(n) O(n)时间的算法:比较类则是指在排序过程中通过元素之间的相互比较进行位置和值的交换。
非线性时间比较类排序
非线性时间比较类排序包括冒泡排序、快速排序、直接插入排序和希尔(Shell)排序、简单选择排序、堆排序和归并排序,而这七种算法又可分为四大类型:
- 交换类排序,如冒泡排序和快速排序;
- 插入类排序,如直接插入排序和希尔排序;
- 选择类排序,如简单选择排序和堆排序;
- 归并排序。
其中,归并排序号称计算速度最快,快速排序和堆排序次之。快速排序和堆排序二者在计算速度上其实并没有差别,只是数据的初始排序状态会对快速排序产生较大影响,而对堆排序则没有影响。