算法 | 空间复杂度 | 时间复杂度(平均/最坏) | 稳定性 |
---|---|---|---|
冒泡排序 | O(1) | O(n2)/O(n2) | 稳定 |
选择排序 | O(1) | O(n2)/O(n2) | 不稳定 |
插入排序 | O(1) | O(n2)/O(n2) | 稳定 |
希尔排序 | O(1) | O(nlogn)/O(ns) (s为步长) | 不稳定 |
快速排序 | O(logn) | O(n*logn)/O(n2) | 不稳定 |
归并排序 | O(n) | O(nlogn)/O(nlogn) | 稳定 |
堆排序 | O(1) | O(nlogn)/O(nlogn) | 不稳定 |
时间复杂度:是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。
计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。
空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
来源:https://blog.csdn.net/Sx_king/article/details/98762683