This commit is contained in:
krahets
2023-04-10 03:12:10 +08:00
parent dda68e47c1
commit 9393f5957c
35 changed files with 399 additions and 544 deletions

View File

@ -1681,19 +1681,20 @@
<h1 id="119">11.9. &nbsp; 小结<a class="headerlink" href="#119" title="Permanent link">&para;</a></h1>
<ul>
<li>冒泡排序通过交换相邻元素来实现排序。通过增加标志位实现提前返回,我们可将冒泡排序的最佳时间复杂度优化 <span class="arithmatex">\(O(N)\)</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)\)</span> ;而排序链表的空间复杂度可以优化至 <span class="arithmatex">\(O(1)\)</span></li>
<li>桶排序分为三步,数据分桶、桶内排序合并结果体现分治策略,适用于体量很大的数据。桶排序的难点在于数据的平均划分</li>
<li>计数排序是桶排序的一特例,通过统计数据出现次数来实现排序适用于数据量大但数据范围不大的情况,并且要求数据可以被转化为正整数。</li>
<li>基数排序通过依次排序各位来实现数据排序,要求数据可以被表示为固定位数的数字。</li>
<li>冒泡排序通过交换相邻元素来实现排序。通过添加一个标志位实现提前返回,我们可将冒泡排序的最佳时间复杂度优化 <span class="arithmatex">\(O(n)\)</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)\)</span> 而排序链表的空间复杂度可以优化至 <span class="arithmatex">\(O(1)\)</span></li>
<li>桶排序包含三个步骤:数据分桶、桶内排序合并结果。它同样体现分治策略,适用于数据体量很大的情况。桶排序的关键在于数据进行平均分配</li>
<li>计数排序是桶排序的一特例,通过统计数据出现次数来实现排序。计数排序适用于数据量大但数据范围有限的情况,并且要求数据能够转换为正整数。</li>
<li>基数排序通过逐位排序来实现数据排序,要求数据能够表示为固定位数的数字。</li>
</ul>
<p><img alt="排序算法对比" src="../summary.assets/sorting_algorithms_comparison.png" /></p>
<p align="center"> Fig. 排序算法对比 </p>
<ul>
<li>总体来看,我们追求运行快、稳定、原地、正向自适应性的排序。显然,如同其数据结构与算法一样,同时满足这些条件的排序算法并不存在,我们需要根据问题特点来选择排序算法。</li>
<li>总体来看,我们追求运行快、稳定、原地、正向自适应性的排序。显然,如同其数据结构与算法一样,同时满足这些条件的排序算法并不存在,我们需要根据问题特点来选择排序算法。</li>
<li>总的来说,我们希望找到一种排序算法,具有高效率、稳定、原地以及正向自适应性等优点。然而,正如其他数据结构和算法一样,没有一种排序算法能够同时满足所有这些条件。在实际应用中,我们需要根据数据的特性来选择合适的排序算法。</li>
</ul>