归并排序
归并排序也叫(Merge sort)。
工作原理
- 将给定的数组一份为二
- 对两部分数组再使用归并排序使其有序
- 最后再将两部分数组合并
时间复杂度计算
1、首先可知
f
(
n
)
=
2
f
(
n
2
)
+
n
f(n)=2f(\frac{n}{2})+n \space\space\space\space\space\space\space\space\space
f(n)=2f(2n)+n
其中:
f
(
n
)
表
示
对
n
个
数
进
行
归
并
排
序
f(n)表示对n个数进行归并排序
f(n)表示对n个数进行归并排序
2
f
(
n
2
)
表
示
将
n
个
数
分
成
两
部
分
分
别
进
行
归
并
排
序
2f(\frac{n}{2})表示将n个数分成两部分分别进行归并排序
2f(2n)表示将n个数分成两部分分别进行归并排序
n
表
示
对
两
个
子
过
程
结
束
之
后
合
并
的
过
程
n表示对两个子过程结束之后合并的过程
n表示对两个子过程结束之后合并的过程
2、推导
f
(
n
2
)
=
2
f
(
n
4
)
+
n
2
当
n
=
n
2
时
f(\frac{n}{2})=2f(\frac{n}{4})+\frac{n}{2} \space\space\space\space\space\space\space\space\space 当n=\frac{n}{2}时
f(2n)=2f(4n)+2n 当n=2n时
f
(
n
4
)
=
2
f
(
n
8
)
+
n
4
当
n
=
n
4
时
f(\frac{n}{4})=2f(\frac{n}{8})+\frac{n}{4} \space\space\space\space\space\space\space\space\space 当n=\frac{n}{4}时
f(4n)=2f(8n)+4n 当n=4n时
…
…
…… \space\space\space\space\space\space\space\space\space
……
f
(
n
2
m
−
1
)
=
2
f
(
n
2
m
)
+
n
2
m
−
1
当
n
=
n
2
m
−
1
时
f(\frac{n}{2^{m-1}})=2f(\frac{n}{2^m})+\frac{n}{2^{m-1}} \space\space\space\space\space\space\space\space\space 当n=\frac{n}{2^{m-1}}时
f(2m−1n)=2f(2mn)+2m−1n 当n=2m−1n时
3、由此可得:
f
(
n
)
=
2
f
(
n
2
)
+
n
f(n)=2f(\frac{n}{2})+n
f(n)=2f(2n)+n
=
2
×
(
2
f
(
n
4
)
+
n
2
)
+
n
= 2\times\bigg(2f(\frac{n}{4})+\frac{n}{2}\bigg)+n
=2×(2f(4n)+2n)+n
=
2
2
f
(
n
2
2
)
+
2
n
=2^2f(\frac{n}{2^2})+2n
=22f(22n)+2n
=
2
2
×
(
2
f
(
n
8
)
+
n
4
)
+
2
n
=2^2\times\bigg(2f(\frac{n}{8})+\frac{n}{4}\bigg)+2n
=22×(2f(8n)+4n)+2n
=
2
3
f
(
n
2
3
)
+
3
n
=2^3f(\frac{n}{2^3})+3n
=23f(23n)+3n
…
…
……
……
=
2
m
f
(
n
2
m
)
+
m
n
=2^mf(\frac{n}{2^m})+mn
=2mf(2mn)+mn
当 m 足够大时(仅剩一个数字时),可使得
n
2
m
=
1
\frac{n}{2^m}=1
2mn=1
求出
m
=
l
o
g
2
n
m=log_2n
m=log2n
代
入
f
(
n
)
=
2
m
f
(
n
2
m
)
+
m
n
中
可
得
代入 \space\space f(n)=2^mf(\frac{n}{2^m})+mn \space\space 中可得
代入 f(n)=2mf(2mn)+mn 中可得
f
(
n
)
=
2
(
l
o
g
2
n
)
f
(
1
)
+
n
⋅
l
o
g
2
n
f(n)=2^{(log_2n)}f(1)+n\cdot log_2n
f(n)=2(log2n)f(1)+n⋅log2n
其
中
f
(
1
)
=
0
其中\space\space f(1)=0
其中 f(1)=0
所
以
最
终
f
(
n
)
=
n
⋅
l
o
g
2
n
所以最终\space\space f(n)=n\cdot log_2n
所以最终 f(n)=n⋅log2n