This commit is contained in:
krahets
2023-08-22 13:50:12 +08:00
parent 0c9bf14e20
commit 92a0853ab8
64 changed files with 478 additions and 479 deletions

View File

@@ -6,7 +6,7 @@ comments: true
「快速排序 quick sort」是一种基于分治策略的排序算法运行高效应用广泛。
快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程如图所示。
快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程如图 11-8 所示。
1. 选取数组最左端元素作为基准数,初始化两个指针 `i``j` 分别指向数组的两端。
2. 设置一个循环,在每轮中使用 `i``j`)分别寻找第一个比基准数大(小)的元素,然后交换这两个元素。
@@ -39,7 +39,7 @@ comments: true
=== "<9>"
![pivot_division_step9](quick_sort.assets/pivot_division_step9.png)
<p align="center"> 图哨兵划分步骤 </p>
<p align="center"> 图 11-8 &nbsp; 哨兵划分步骤 </p>
哨兵划分完成后,原数组被划分成三部分:左子数组、基准数、右子数组,且满足“左子数组任意元素 $\leq$ 基准数 $\leq$ 右子数组任意元素”。因此,我们接下来只需对这两个子数组进行排序。
@@ -362,7 +362,7 @@ comments: true
## 11.5.1 &nbsp; 算法流程
快速排序的整体流程如图所示。
快速排序的整体流程如图 11-9 所示。
1. 首先,对原数组执行一次“哨兵划分”,得到未排序的左子数组和右子数组。
2. 然后,对左子数组和右子数组分别递归执行“哨兵划分”。
@@ -370,7 +370,7 @@ comments: true
![快速排序流程](quick_sort.assets/quick_sort_overview.png)
<p align="center"> 图快速排序流程 </p>
<p align="center"> 图 11-9 &nbsp; 快速排序流程 </p>
=== "Java"