|
136 | 136 | <li class="toctree-l3"><a href="#_1">归并排序</a></li>
|
137 | 137 |
|
138 | 138 |
|
139 |
| - <li class="toctree-l3"><a href="#_2">延伸阅读</a></li> |
| 139 | + <li class="toctree-l3"><a href="#_2">时间复杂度</a></li> |
| 140 | + |
| 141 | + |
| 142 | + <li class="toctree-l3"><a href="#_3">思考题</a></li> |
| 143 | + |
| 144 | + |
| 145 | + <li class="toctree-l3"><a href="#_4">延伸阅读</a></li> |
140 | 146 |
|
141 | 147 |
|
142 | 148 | </ul>
|
@@ -223,7 +229,8 @@ <h1 id="_1">归并排序</h1>
|
223 | 229 | return new_seq
|
224 | 230 | </code></pre>
|
225 | 231 |
|
226 |
| -<p>注意我们这里有一个函数没实现,就是如何合并两个有序数组 merge_sorted_list</p> |
| 232 | +<p>注意我们这里有一个函数没实现,就是如何合并两个有序数组 merge_sorted_list。其实你在纸上画一画, |
| 233 | +合并两个有序数组并不难实现。</p> |
227 | 234 | <p><img alt="" src="../merge_sorted_array.png" /></p>
|
228 | 235 | <pre><code class="py">def merge_sorted_list(sorted_a, sorted_b):
|
229 | 236 | """ 合并两个有序序列,返回一个新的有序序列
|
@@ -255,10 +262,26 @@ <h1 id="_1">归并排序</h1>
|
255 | 262 | return new_sorted_seq
|
256 | 263 | </code></pre>
|
257 | 264 |
|
258 |
| -<p>这样就实现了归并排序。</p> |
259 |
| -<h1 id="_2">延伸阅读</h1> |
| 265 | +<p>这样就实现了归并排序,并且你会发现它返回一个新的数组而不是修改原有数组。</p> |
| 266 | +<h1 id="_2">时间复杂度</h1> |
| 267 | +<p>我们来简单看下它归并排序的时间复杂度,假设排序 n 个数字时间复杂度是 T(n),这里为了方便假设 n 是 2 的幂</p> |
| 268 | +<p> |
| 269 | +<script type="math/tex; mode=display">\begin{align} |
| 270 | +T(n)= \begin{cases} c, & \text {if $n$ = 1} \\ 2T(n/2)+cn, & \text{if $n$ > 1} \end{cases} |
| 271 | +\end{align}</script> |
| 272 | +</p> |
| 273 | +<p><img alt="" src="../merge_sort_recursion_tree.png" /></p> |
| 274 | +<p>总的代价是 <script type="math/tex">cnlg(n)+cn</script> ,忽略常数项可以认为是 O(nlg(n))</p> |
| 275 | +<h1 id="_3">思考题</h1> |
| 276 | +<ul> |
| 277 | +<li>请你完成归并排序的单元测试</li> |
| 278 | +<li>这里实现的归并排序是 inplace 的吗?</li> |
| 279 | +<li>归并排序是稳定的吗?稳定指的是排序前后相同大小的数字依然保持相对顺序。</li> |
| 280 | +</ul> |
| 281 | +<h1 id="_4">延伸阅读</h1> |
260 | 282 | <ul>
|
261 |
| -<li>《算法导论》第 2 章</li> |
| 283 | +<li>《算法导论》第 2 章和第 4 章,你需要了解下『主定理』,以及如何求解形如 <script type="math/tex">T(n)=aT(n/b) + f(n)</script> 的递归式复杂度</li> |
| 284 | +<li>了解算法导论上递归式的三种求解方法:代入法,递归树法,主方法</li> |
262 | 285 | </ul>
|
263 | 286 |
|
264 | 287 | </div>
|
|
0 commit comments