mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 06:07:20 +08:00 
			
		
		
		
	Polish some texts.
This commit is contained in:
		@ -3,6 +3,7 @@
 | 
				
			|||||||
 * Created Time: 2023-04-15
 | 
					 * Created Time: 2023-04-15
 | 
				
			||||||
 * Author: Gonglja (glj0@outlook.com)
 | 
					 * Author: Gonglja (glj0@outlook.com)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../utils/common.h"
 | 
					#include "../utils/common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 函数 */
 | 
					/* 函数 */
 | 
				
			||||||
 | 
				
			|||||||
@ -43,8 +43,10 @@ $$
 | 
				
			|||||||
另一方面,**数字零的原码有 $+0$ 和 $-0$ 两种表示方式**。这意味着数字零对应着两个不同的二进制编码,而这可能会带来歧义问题。例如,在条件判断中,如果没有区分正零和负零,可能会导致错误的判断结果。如果我们想要处理正零和负零歧义,则需要引入额外的判断操作,其可能会降低计算机的运算效率。
 | 
					另一方面,**数字零的原码有 $+0$ 和 $-0$ 两种表示方式**。这意味着数字零对应着两个不同的二进制编码,而这可能会带来歧义问题。例如,在条件判断中,如果没有区分正零和负零,可能会导致错误的判断结果。如果我们想要处理正零和负零歧义,则需要引入额外的判断操作,其可能会降低计算机的运算效率。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$$
 | 
					$$
 | 
				
			||||||
+0 = 0000 \space 0000 \newline
 | 
					\begin{aligned}
 | 
				
			||||||
-0 = 1000 \space 0000
 | 
					+0 & = 0000 \space 0000 \newline
 | 
				
			||||||
 | 
					-0 & = 1000 \space 0000
 | 
				
			||||||
 | 
					\end{aligned}
 | 
				
			||||||
$$
 | 
					$$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
与原码一样,反码也存在正负零歧义问题。为此,计算机进一步引入了「补码」。那么,补码有什么作用呢?我们先来分析一下负零的补码的计算过程:
 | 
					与原码一样,反码也存在正负零歧义问题。为此,计算机进一步引入了「补码」。那么,补码有什么作用呢?我们先来分析一下负零的补码的计算过程:
 | 
				
			||||||
 | 
				
			|||||||
@ -7,10 +7,13 @@
 | 
				
			|||||||
「堆排序 Heap Sort」是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”实现堆排序:
 | 
					「堆排序 Heap Sort」是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”实现堆排序:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. 输入数组并建立小顶堆,此时最小元素位于堆顶。
 | 
					1. 输入数组并建立小顶堆,此时最小元素位于堆顶。
 | 
				
			||||||
2. 初始化一个数组 `res` ,用于存储排序结果。
 | 
					2. 不断执行出堆操作,依次记录出堆元素,即可得到从小到大排序的序列。
 | 
				
			||||||
3. 循环执行 $n$ 轮出堆操作,并依次将出堆元素记录至 `res` ,即可得到从小到大排序的序列。
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
该方法虽然可行,但需要借助一个额外数组,比较浪费空间。在实际中,我们通常使用一种更加优雅的实现方式。设数组的长度为 $n$ ,堆排序的流程如下:
 | 
					以上方法虽然可行,但需要借助一个额外数组来保存弹出的元素,比较浪费空间。在实际中,我们通常使用一种更加优雅的实现方式。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 算法流程
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					设数组的长度为 $n$ ,堆排序的流程如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. 输入数组并建立大顶堆。完成后,最大元素位于堆顶。
 | 
					1. 输入数组并建立大顶堆。完成后,最大元素位于堆顶。
 | 
				
			||||||
2. 将堆顶元素(第一个元素)与堆底元素(最后一个元素)交换。完成交换后,堆的长度减 $1$ ,已排序元素数量加 $1$ 。
 | 
					2. 将堆顶元素(第一个元素)与堆底元素(最后一个元素)交换。完成交换后,堆的长度减 $1$ ,已排序元素数量加 $1$ 。
 | 
				
			||||||
@ -139,6 +142,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## 算法特性
 | 
					## 算法特性
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- **时间复杂度 $O(n \log n)$ 、非自适应排序** :从堆中提取最大元素的时间复杂度为 $O(\log n)$ ,共循环 $n - 1$ 轮。
 | 
					- **时间复杂度 $O(n \log n)$ 、非自适应排序** :建堆操作使用 $O(n)$ 时间。从堆中提取最大元素的时间复杂度为 $O(\log n)$ ,共循环 $n - 1$ 轮。
 | 
				
			||||||
- **空间复杂度 $O(1)$ 、原地排序** :几个指针变量使用 $O(1)$ 空间。元素交换和堆化操作都是在原数组上进行的。
 | 
					- **空间复杂度 $O(1)$ 、原地排序** :几个指针变量使用 $O(1)$ 空间。元素交换和堆化操作都是在原数组上进行的。
 | 
				
			||||||
- **非稳定排序**:在交换堆顶元素和堆底元素时,相等元素的相对位置可能发生变化。
 | 
					- **非稳定排序**:在交换堆顶元素和堆底元素时,相等元素的相对位置可能发生变化。
 | 
				
			||||||
 | 
				
			|||||||
@ -137,7 +137,7 @@ nav:
 | 
				
			|||||||
    - 2.2.   时间复杂度: chapter_computational_complexity/time_complexity.md
 | 
					    - 2.2.   时间复杂度: chapter_computational_complexity/time_complexity.md
 | 
				
			||||||
    - 2.3.   空间复杂度: chapter_computational_complexity/space_complexity.md
 | 
					    - 2.3.   空间复杂度: chapter_computational_complexity/space_complexity.md
 | 
				
			||||||
    - 2.4.   小结: chapter_computational_complexity/summary.md
 | 
					    - 2.4.   小结: chapter_computational_complexity/summary.md
 | 
				
			||||||
  - 3.     数据结构与类型:
 | 
					  - 3.     数据结构简介:
 | 
				
			||||||
    - 3.1.   数据结构分类: chapter_data_structure/classification_of_data_structure.md
 | 
					    - 3.1.   数据结构分类: chapter_data_structure/classification_of_data_structure.md
 | 
				
			||||||
    - 3.2.   基本数据类型: chapter_data_structure/basic_data_types.md
 | 
					    - 3.2.   基本数据类型: chapter_data_structure/basic_data_types.md
 | 
				
			||||||
    - 3.3.   数字编码 *: chapter_data_structure/number_encoding.md
 | 
					    - 3.3.   数字编码 *: chapter_data_structure/number_encoding.md
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user