mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-13 10:09:54 +08:00
build
This commit is contained in:
@@ -29,6 +29,8 @@ comments: true
|
||||
=== "<7>"
|
||||

|
||||
|
||||
<p align="center"> 图:利用元素交换操作模拟冒泡 </p>
|
||||
|
||||
## 11.3.1. 算法流程
|
||||
|
||||
设数组的长度为 $n$ ,冒泡排序的步骤为:
|
||||
@@ -40,7 +42,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 冒泡排序流程 </p>
|
||||
<p align="center"> 图:冒泡排序流程 </p>
|
||||
|
||||
=== "Java"
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 桶排序算法流程 </p>
|
||||
<p align="center"> 图:桶排序算法流程 </p>
|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -411,10 +411,10 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 递归划分桶 </p>
|
||||
<p align="center"> 图:递归划分桶 </p>
|
||||
|
||||
如果我们提前知道商品价格的概率分布,**则可以根据数据概率分布设置每个桶的价格分界线**。值得注意的是,数据分布并不一定需要特意统计,也可以根据数据特点采用某种概率模型进行近似。如下图所示,我们假设商品价格服从正态分布,这样就可以合理地设定价格区间,从而将商品平均分配到各个桶中。
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 根据概率分布划分桶 </p>
|
||||
<p align="center"> 图:根据概率分布划分桶 </p>
|
||||
|
||||
@@ -16,7 +16,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 计数排序流程 </p>
|
||||
<p align="center"> 图:计数排序流程 </p>
|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -362,6 +362,8 @@ $$
|
||||
=== "<8>"
|
||||

|
||||
|
||||
<p align="center"> 图:计数排序步骤 </p>
|
||||
|
||||
计数排序的实现代码如下所示。
|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -62,6 +62,8 @@ comments: true
|
||||
=== "<12>"
|
||||

|
||||
|
||||
<p align="center"> 图:堆排序步骤 </p>
|
||||
|
||||
在代码实现中,我们使用了与堆章节相同的从顶至底堆化(Sift Down)的函数。值得注意的是,由于堆的长度会随着提取最大元素而减小,因此我们需要给 Sift Down 函数添加一个长度参数 $n$ ,用于指定堆的当前有效长度。
|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -12,7 +12,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 单次插入操作 </p>
|
||||
<p align="center"> 图:单次插入操作 </p>
|
||||
|
||||
## 11.4.1. 算法流程
|
||||
|
||||
@@ -25,7 +25,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 插入排序流程 </p>
|
||||
<p align="center"> 图:插入排序流程 </p>
|
||||
|
||||
=== "Java"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 归并排序的划分与合并阶段 </p>
|
||||
<p align="center"> 图:归并排序的划分与合并阶段 </p>
|
||||
|
||||
## 11.6.1. 算法流程
|
||||
|
||||
@@ -52,6 +52,8 @@ comments: true
|
||||
=== "<10>"
|
||||

|
||||
|
||||
<p align="center"> 图:归并排序步骤 </p>
|
||||
|
||||
观察发现,归并排序的递归顺序与二叉树的后序遍历相同,具体来看:
|
||||
|
||||
- **后序遍历**:先递归左子树,再递归右子树,最后处理根节点。
|
||||
|
||||
@@ -41,6 +41,8 @@ comments: true
|
||||
=== "<9>"
|
||||

|
||||
|
||||
<p align="center"> 图:哨兵划分步骤 </p>
|
||||
|
||||
!!! note "快速排序的分治思想"
|
||||
|
||||
哨兵划分的实质是将一个较长数组的排序问题简化为两个较短数组的排序问题。
|
||||
@@ -366,7 +368,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 快速排序流程 </p>
|
||||
<p align="center"> 图:快速排序流程 </p>
|
||||
|
||||
=== "Java"
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 基数排序算法流程 </p>
|
||||
<p align="center"> 图:基数排序算法流程 </p>
|
||||
|
||||
下面来剖析代码实现。对于一个 $d$ 进制的数字 $x$ ,要获取其第 $k$ 位 $x_k$ ,可以使用以下计算公式:
|
||||
|
||||
|
||||
@@ -47,6 +47,8 @@ comments: true
|
||||
=== "<11>"
|
||||

|
||||
|
||||
<p align="center"> 图:选择排序步骤 </p>
|
||||
|
||||
在代码中,我们用 $k$ 来记录未排序区间内的最小元素。
|
||||
|
||||
=== "Java"
|
||||
@@ -290,4 +292,4 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 选择排序非稳定示例 </p>
|
||||
<p align="center"> 图:选择排序非稳定示例 </p>
|
||||
|
||||
@@ -10,7 +10,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 数据类型和判断规则示例 </p>
|
||||
<p align="center"> 图:数据类型和判断规则示例 </p>
|
||||
|
||||
## 11.1.1. 评价维度
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ comments: true
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 排序算法对比 </p>
|
||||
<p align="center"> 图:排序算法对比 </p>
|
||||
|
||||
## 11.11.1. Q & A
|
||||
|
||||
|
||||
Reference in New Issue
Block a user