1.排序算法总览
冒泡排序、选择排序、插入排序,交换排序,时间复杂度为O(n^2);
基数排序、计数排序,划分排序,桶排序,时间复杂度都是O(n)
1.排序算法稳定性与不稳定行比较
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
2.不同排序算法性能比较框图
排序算法 | 平均时间复杂度 | 最差时间复杂度 | 额外空间复杂度 | 稳定性 | 备注 |
冒泡排序 | o(n^2) | o(n^2) | o(1) | 稳定 | n小时效果好 |
选择排序 | o(n^2) | o(n^2) | o(1) | 不稳定 | n小时效果好 |
交换排序 | o(n^2) | o(n^2) | o(1) | 不稳定 | n小时效果好 |
插入排序 | o(n^2) | o(n^2) | o(1) | 稳定 | n小时效果好 |
快速排序 | o(nlogn) | o(n^2) | o(nlogn)-o(n) | 不稳定 | n大时效果好 |
归并排序 | o(nlogn) | o(nlogn) | o(n) | 稳定 | n大时效果好 |
堆排序 | o(nlogn) | o(nlogn) | o(1) | 不稳定 | n大时效果好 |
希尔排序 | o(nlogn) | o(ns) 1<s<2 | o(1) | 不稳定 | s是所选分组 |
基数排序 | o(logRB)(线性复杂度) | o(logRB) | o(n) | 稳定 | B是真数(0-9), R是基数(个十百) |
计数排序 | o(n) | o(nlogn) | 稳定 | 0 | |
划分排序 | o(n) | 0 | 0 | 稳定 | 0 |
桶排序 | o(n) | 0 | 0 | 稳定 | 0 |
快速排序空间复杂度解析:快速排序来说,没有申请额外的空间,为什么空间复杂度不是O(1)呢,原来啊,快速排序用了递归来实现,
而递归的话,就造成了栈空间的使用,递归树的深度为(logn),因此快排的空间复杂度为O(nlogn)
堆排序空间复杂度解析:堆排序是就地排序,并没有申请额外的存储空间(最多就是交换时,使用的临时变量),因此空间复杂度为O(1)
2.算法时间复杂度初识
时间复杂度:时间复杂度是指执行算法所需要的计算工作量
空间复杂度:而空间复杂度是指执行这个算法所需要的内存空间