This commit is contained in:
krahets 2023-03-26 22:44:59 +08:00
parent 5901ac43e7
commit 6d3f34fbbe
4 changed files with 4 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View file

@ -1685,7 +1685,9 @@
<li>插入排序每轮将待排序区间内元素插入至已排序区间的正确位置,从而实现排序。插入排序的时间复杂度虽为 <span class="arithmatex">\(O(N^2)\)</span> ,但因为总体操作少而很受欢迎,一般用于小数据量的排序工作。</li> <li>插入排序每轮将待排序区间内元素插入至已排序区间的正确位置,从而实现排序。插入排序的时间复杂度虽为 <span class="arithmatex">\(O(N^2)\)</span> ,但因为总体操作少而很受欢迎,一般用于小数据量的排序工作。</li>
<li>快速排序基于哨兵划分操作实现排序。在哨兵划分中,有可能每次都选取到最差的基准数,从而导致时间复杂度劣化至 <span class="arithmatex">\(O(N^2)\)</span> ,通过引入中位数基准数或随机基准数可大大降低劣化概率。尾递归方法可以有效减小递归深度,将空间复杂度优化至 <span class="arithmatex">\(O(\log N)\)</span></li> <li>快速排序基于哨兵划分操作实现排序。在哨兵划分中,有可能每次都选取到最差的基准数,从而导致时间复杂度劣化至 <span class="arithmatex">\(O(N^2)\)</span> ,通过引入中位数基准数或随机基准数可大大降低劣化概率。尾递归方法可以有效减小递归深度,将空间复杂度优化至 <span class="arithmatex">\(O(\log N)\)</span></li>
<li>归并排序包含划分和合并两个阶段,是分而治之的标准体现。对于归并排序,排序数组需要借助辅助数组,空间复杂度为 <span class="arithmatex">\(O(N)\)</span> ;而排序链表的空间复杂度可以被优化至 <span class="arithmatex">\(O(1)\)</span></li> <li>归并排序包含划分和合并两个阶段,是分而治之的标准体现。对于归并排序,排序数组需要借助辅助数组,空间复杂度为 <span class="arithmatex">\(O(N)\)</span> ;而排序链表的空间复杂度可以被优化至 <span class="arithmatex">\(O(1)\)</span></li>
<li>下图总结对比了各个排序算法的运行效率与特性。其中,桶排序中 <span class="arithmatex">\(k\)</span> 为桶的数量;基数排序仅适用于正整数、字符串、特定格式的浮点数,<span class="arithmatex">\(k\)</span> 为最大数字的位数。</li> <li>桶排序分为三步,数据分桶、桶内排序、合并结果,体现分治策略,适用于体量很大的数据。桶排序的难点在于数据的平均划分。</li>
<li>计数排序是桶排序的一种特例,通过统计数据出现次数来实现排序;适用于数据量大但数据范围不大的情况,并且要求数据可以被转化为正整数。</li>
<li>基数排序通过依次排序各位来实现数据排序,要求数据可以被表示为固定位数的数字。</li>
</ul> </ul>
<p><img alt="排序算法对比" src="../summary.assets/sorting_algorithms_comparison.png" /></p> <p><img alt="排序算法对比" src="../summary.assets/sorting_algorithms_comparison.png" /></p>
<p align="center"> Fig. 排序算法对比 </p> <p align="center"> Fig. 排序算法对比 </p>

File diff suppressed because one or more lines are too long

Binary file not shown.