一、常用排序算法的时间复杂度和空间复杂度表格
二、特点
1.归并排序:
(1)n大时好,归并比较占用内存,内存随n的增大而增大,但却是效率高且稳定的排序算法。
(2)归并排序每次递归都要用到一个辅助表,长度与待排序的表长度相同,虽然递归次数是O(log2n),但每次递归都会释放掉所占的辅助空间
(3)虽然插入排序的时间复杂度为O(n2),归并排序的时间复杂度为O(nlog2n),但插入排序中的常数因子使得它在n较小时,运行更快一些。因此,在归并排序算法中,当子问题足够小时,采用插入排序算法就比较合适
(4)以时间换空间:网上很多blog分享空间复杂度只有O(1)的归并排序法;因为传统的归并排序所消耗的空间主要是在归并函数(把两个有序的函数合并成一个有序的函数),所以如果要让时间复杂度为O(1),那么也只能在归并函数中做文章了。其主要思想就是借助于快速排序(其实就是相当于归并函数被快速排序函数替换了),这样的方法虽然可以减少内存的消耗,但是却会在时间上带来损失,因为这样时间复杂度却变成了O(n2)了;所以这种方法并不是一个两全其美的idea。
2.冒泡排序
(1)冒泡排序是一种用时间换空间的排序方法,n小时好
(2)最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(n2)只是表示其操作次数的数量级
(3)最好的情况是数据本来就有序,复杂度为O(n)
3.快速排序
(1)n大时好,快速排序比较占用内存,内存随n的增大而增大,但却是效率高不稳定的排序算法。
(2)划分之后一边是一个,一边是n-1个,这种极端情况的时间复杂度就是O(n2)
(3)最好的情况是每次都能均匀的划分序列,O(nlog2n)
(4)快速排序空间复杂度只是在通常情况下才为O(log2n),如果是最坏情况的话,很显然就要O(n)的空间了。当然,可以通过随机化选择pivot来将空间复杂度降低到O(log2n)。
三、相关概念
1、时间复杂度
时间复杂度可以认为是对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2)
时间复杂度O(1):算法中语句执行次数为一个常数,则时间复杂度为O(1)
2、空间复杂度
空间复杂度是指算法在计算机内执行时所需存储空间的度量,它也是问题规模n的函数
空间复杂度O(1):当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)
空间复杂度O(log2N):当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(log2n)
空间复杂度O(n):当一个算法的空间复杂度与n成线性比例关系时,可表示为O(n).
---------------------
原文:https://blog.csdn.net/jiajing_guo/article/details/69388331