常用排序的稳定性、时间与空间复杂度比较

一、概念

1.1 时间复杂度

 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,Tn)/f(n)的极限值为不等于零的常数,则称f(n)T(n)的同数量级函数。记作T(n)=(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

         在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2) 按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),... k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

 

1.2空间复杂度

与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作: S(n)=O(f(n)) 我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。

         当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为0(10g2n)

 

1.3 稳定性

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且rirj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

 

二、常用的排序算法

2.1 常用算法的稳定性

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,

冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

 

扫描二维码关注公众号,回复: 221869 查看本文章

2.2 算法的复杂度与稳定性比较



 

 

 

猜你喜欢

转载自windloft.iteye.com/blog/2412263