归并排序算法
设归并排序所花时间为 T ( N ) T(N) T(N),其中 N N N 为输入数据长度
1、当 n == 1 时,返回,时间复杂度 1 1 1
2、排序好左边 N 2 \frac{N}{2} 2N 个元素,时间复杂度 T ( N / 2 ) T(N/2) T(N/2)
3、排序好右边 N 2 \frac{N}{2} 2N 个元素,时间复杂度 T ( N / 2 ) T(N/2) T(N/2)
4、归并排序好的左边和右边元素,时间复杂度 θ ( N ) \theta(N) θ(N)
根据上述算法有
T
(
N
)
=
{
1
N
=
1
2
T
(
N
/
2
)
+
θ
(
N
)
N
>
1
T(N)=\left\{\begin{aligned} & 1 & N = 1 \\ & 2T(N/2) + \theta(N) & N > 1 \\ \end{aligned}\right.
T(N)={12T(N/2)+θ(N)N=1N>1
其中
θ
\theta
θ 表示阶,
θ
(
N
)
\theta(N)
θ(N) 表示一阶,可以使用
c
N
cN
cN 表示,其中
c
c
c 为常数。
递归树
使用递归树对公式进行分解如下图所示:
最终可以分解为一个高度为
lg
N
\lg N
lgN,每一层之和为
c
N
cN
cN 的二叉递归树,
T
(
N
)
T(N)
T(N) 即为树上每个节点之和,所以:
T
(
N
)
=
c
N
lg
N
=
θ
(
N
lg
N
)
+
θ
(
N
)
T(N) = cN\lg N = \theta(N\lg N) + \theta(N)
T(N)=cNlgN=θ(NlgN)+θ(N)
所以归并排序的时间复杂度为
θ
(
N
lg
N
)
\theta(N\lg N)
θ(NlgN)。