mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-14 02:10:37 +08:00
deploy
This commit is contained in:
@@ -3419,9 +3419,9 @@
|
||||
<p>「快速排序 Quick Sort」是一种基于分治思想的排序算法,运行高效,应用广泛。</p>
|
||||
<p>快速排序的核心操作是「哨兵划分」,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程为:</p>
|
||||
<ol>
|
||||
<li>选取数组最左端元素作为基准数,初始化两个指针 <code>i</code> 和 <code>j</code> 分别指向数组的两端;</li>
|
||||
<li>设置一个循环,在每轮中使用 <code>i</code>(<code>j</code>)分别寻找第一个比基准数大(小)的元素,然后交换这两个元素;</li>
|
||||
<li>循环执行步骤 <code>2.</code> ,直到 <code>i</code> 和 <code>j</code> 相遇时停止,最后将基准数交换至两个子数组的分界线;</li>
|
||||
<li>选取数组最左端元素作为基准数,初始化两个指针 <code>i</code> 和 <code>j</code> 分别指向数组的两端。</li>
|
||||
<li>设置一个循环,在每轮中使用 <code>i</code>(<code>j</code>)分别寻找第一个比基准数大(小)的元素,然后交换这两个元素。</li>
|
||||
<li>循环执行步骤 <code>2.</code> ,直到 <code>i</code> 和 <code>j</code> 相遇时停止,最后将基准数交换至两个子数组的分界线。</li>
|
||||
</ol>
|
||||
<p>哨兵划分完成后,原数组被划分成三部分:左子数组、基准数、右子数组,且满足“左子数组任意元素 <span class="arithmatex">\(\leq\)</span> 基准数 <span class="arithmatex">\(\leq\)</span> 右子数组任意元素”。因此,我们接下来只需对这两个子数组进行排序。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="1:9"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1"><1></label><label for="__tabbed_1_2"><2></label><label for="__tabbed_1_3"><3></label><label for="__tabbed_1_4"><4></label><label for="__tabbed_1_5"><5></label><label for="__tabbed_1_6"><6></label><label for="__tabbed_1_7"><7></label><label for="__tabbed_1_8"><8></label><label for="__tabbed_1_9"><9></label></div>
|
||||
@@ -3735,9 +3735,9 @@
|
||||
</div>
|
||||
<h2 id="1151">11.5.1. 算法流程<a class="headerlink" href="#1151" title="Permanent link">¶</a></h2>
|
||||
<ol>
|
||||
<li>首先,对原数组执行一次「哨兵划分」,得到未排序的左子数组和右子数组;</li>
|
||||
<li>然后,对左子数组和右子数组分别递归执行「哨兵划分」;</li>
|
||||
<li>持续递归,直至子数组长度为 1 时终止,从而完成整个数组的排序;</li>
|
||||
<li>首先,对原数组执行一次「哨兵划分」,得到未排序的左子数组和右子数组。</li>
|
||||
<li>然后,对左子数组和右子数组分别递归执行「哨兵划分」。</li>
|
||||
<li>持续递归,直至子数组长度为 1 时终止,从而完成整个数组的排序。</li>
|
||||
</ol>
|
||||
<p><img alt="快速排序流程" src="../quick_sort.assets/quick_sort_overview.png" /></p>
|
||||
<p align="center"> Fig. 快速排序流程 </p>
|
||||
|
||||
Reference in New Issue
Block a user