本节作为排序的开场白,先总结一下各种排序的稳定性和时间复杂度。
首先说一下排序稳定性的定义:
假设排序序号是 i 和 j ,且在排序前的序列中 i 领先于 j ,如果排序之后 i 仍然领先于 j ,则称所有的排方法是稳定的;反之,若使得排序后的序列中,j 领先 i ,则称所用的排序算法是不稳定的。
冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法;
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法。
具体的原因会在下面的章节中进行论述。
冒泡法:
这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。
直接插入排序:O(n*n)
选择排序:O(n*n)
快速排序:平均时间复杂度 n * log2 n,所有内部排序方法中最高好的,大多数情况下总是最好的。
归并排序:n * log2 n
堆排序:n * log2 n
希尔排序:算法的复杂度为n的1.2次幂