总结一下递归排序和非递归排序算法的特点
从 最好情况、最坏情况、平均情况时间复杂度,算法的内存消耗和稳定性方面考虑。
一、非递归排序
1、冒泡排序
空间复杂度为 O(1),是一个原地排序算法。
只有交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,两个元素相等的时候不做交换,所以是稳定的算法
时间复杂度:最好情况下是O(n),因为所有数据都已有效,只冒泡一次。最坏情况时间复杂度为 O(n2)
2、插入排序
空间复杂度为 O(1),是一个原地排序算法。
对于值相同的元素,我们可以选择将后面出现的元素,插入到前面出显得元素的后面,所以是稳定的算法。
时间复杂度:最好情况下是O(n),因为所有数据都已有效,从头到尾比较n次。最坏情况时间复杂度为 O(n2),相当于搬移数据的次数。
3、选择排序
每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。频繁的数据搬移代价非常高
空间复杂度为 O(1),是一个原地排序算法。因为每次都会用未排区间最小的元素和最前面的一个位置交换,所以会破坏稳定性。
最好最坏时间复杂度都是 O(n2)
二、递归排序
1、归并排序
2、快速排序
快速排序的运行时间依赖于是否划分平衡。如果划分是不平衡的,性能就接近于插入排序了。
之后会慢慢更新