mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-14 02:10:37 +08:00
deploy
This commit is contained in:
@@ -3455,7 +3455,7 @@
|
||||
|
||||
<h1 id="115">11.5 快速排序<a class="headerlink" href="#115" title="Permanent link">¶</a></h1>
|
||||
<p>「快速排序 quick sort」是一种基于分治策略的排序算法,运行高效,应用广泛。</p>
|
||||
<p>快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程如下图所示。</p>
|
||||
<p>快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程如图 11-8 所示。</p>
|
||||
<ol>
|
||||
<li>选取数组最左端元素作为基准数,初始化两个指针 <code>i</code> 和 <code>j</code> 分别指向数组的两端。</li>
|
||||
<li>设置一个循环,在每轮中使用 <code>i</code>(<code>j</code>)分别寻找第一个比基准数大(小)的元素,然后交换这两个元素。</li>
|
||||
@@ -3492,7 +3492,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p align="center"> 图:哨兵划分步骤 </p>
|
||||
<p align="center"> 图 11-8 哨兵划分步骤 </p>
|
||||
|
||||
<p>哨兵划分完成后,原数组被划分成三部分:左子数组、基准数、右子数组,且满足“左子数组任意元素 <span class="arithmatex">\(\leq\)</span> 基准数 <span class="arithmatex">\(\leq\)</span> 右子数组任意元素”。因此,我们接下来只需对这两个子数组进行排序。</p>
|
||||
<div class="admonition note">
|
||||
@@ -3793,14 +3793,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="1151">11.5.1 算法流程<a class="headerlink" href="#1151" title="Permanent link">¶</a></h2>
|
||||
<p>快速排序的整体流程如下图所示。</p>
|
||||
<p>快速排序的整体流程如图 11-9 所示。</p>
|
||||
<ol>
|
||||
<li>首先,对原数组执行一次“哨兵划分”,得到未排序的左子数组和右子数组。</li>
|
||||
<li>然后,对左子数组和右子数组分别递归执行“哨兵划分”。</li>
|
||||
<li>持续递归,直至子数组长度为 1 时终止,从而完成整个数组的排序。</li>
|
||||
</ol>
|
||||
<p><img alt="快速排序流程" src="../quick_sort.assets/quick_sort_overview.png" /></p>
|
||||
<p align="center"> 图:快速排序流程 </p>
|
||||
<p align="center"> 图 11-9 快速排序流程 </p>
|
||||
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="3:12"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><input id="__tabbed_3_3" name="__tabbed_3" type="radio" /><input id="__tabbed_3_4" name="__tabbed_3" type="radio" /><input id="__tabbed_3_5" name="__tabbed_3" type="radio" /><input id="__tabbed_3_6" name="__tabbed_3" type="radio" /><input id="__tabbed_3_7" name="__tabbed_3" type="radio" /><input id="__tabbed_3_8" name="__tabbed_3" type="radio" /><input id="__tabbed_3_9" name="__tabbed_3" type="radio" /><input id="__tabbed_3_10" name="__tabbed_3" type="radio" /><input id="__tabbed_3_11" name="__tabbed_3" type="radio" /><input id="__tabbed_3_12" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Java</label><label for="__tabbed_3_2">C++</label><label for="__tabbed_3_3">Python</label><label for="__tabbed_3_4">Go</label><label for="__tabbed_3_5">JS</label><label for="__tabbed_3_6">TS</label><label for="__tabbed_3_7">C</label><label for="__tabbed_3_8">C#</label><label for="__tabbed_3_9">Swift</label><label for="__tabbed_3_10">Zig</label><label for="__tabbed_3_11">Dart</label><label for="__tabbed_3_12">Rust</label></div>
|
||||
<div class="tabbed-content">
|
||||
|
||||
Reference in New Issue
Block a user