例: 求解递推关系T(n) = 2T(n/4) + n log n
a = 2,b = 4⇒n^logba = n^log42 = n0.5
f (n) = n log n
Case 3:f (n) =Ω(n0.5+ε),其中ε=0.5>0
并且 a f (n/b) = 2 (n/4)log(n/4) = (1/2)n log n – n ≤(1/2)n log n = c f (n),其中c=1/2<1
∴T (n) =Θ(n log n)
顺口溜:
快选希堆不稳(这几种排序是不稳定的), 归选基堆不变(这几种排序的时间复杂度不变化)
元素的时间复杂度与初始序列无关的是:口诀:一堆(堆排序)海归(归并排序)选(选择排序)基友
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
空间复杂度:
冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引)
快速排序空间复杂度为logn(因为递归调用了) ,
归并排序空间复杂是O(n),需要一个大小为n的临时数组.
基数排序的空间复杂是O(n),桶排序的空间复杂度不确定
快排的时间复杂度平均就是O(nlogn),当数据序列有序时最差是O(n^2),退化成了冒泡排序;空间复杂度log(n),最坏是O(n),
快排最好的情况下,时间复杂度是 O(N*logN).