Update 算法 - 排序.md

代码经本地对拍验证;堆排序适用场景的表述与错别字校对。
This commit is contained in:
CyC2018
2026-10-28 22:51:11 +08:00
parent e5bcc8f88c
commit 05604bb884
+4 -4
View File
@@ -142,7 +142,7 @@ public class Shell<T extends Comparable<T>> extends Sort<T> {
```
希尔排序的运行时间达不到平方级别,使用递增序列 1, 4, 13, 40, ... 的希尔排序所需要的比较次数不会超过 N 的若干倍乘于递增序列的长度。后面介绍的高级排序算法只会比希尔排序快两倍左右。
希尔排序的运行时间达不到平方级别,使用递增序列 1, 4, 13, 40, ... 的希尔排序所需要的比较次数不会超过 N 的若干倍乘以递增序列的长度。后面介绍的高级排序算法只会比希尔排序快两倍左右。
## 归并排序
@@ -413,7 +413,7 @@ public class Heap<T extends Comparable<T>> {
### 2. 上浮和下沉
在堆中,当一个节点比父节点大,那么需要交换这个两个节点。交换后还可能比它新的父节点大,因此需要不断地进行比较和交换操作,把这种操作称为上浮。
在堆中,当一个节点比父节点大,那么需要交换这两个节点。交换后还可能比它新的父节点大,因此需要不断地进行比较和交换操作,把这种操作称为上浮。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/99d5e84e-fc2a-49a3-8259-8de274617756.gif" width="270px"> </div><br>
@@ -528,7 +528,7 @@ public class HeapSort<T extends Comparable<T>> extends Sort<T> {
堆排序是一种原地排序,没有利用额外的空间。
现代操作系统很少使用堆排序,因为它无法利用局部性原理进行缓存,也就是数组元素很少和相邻的元素进行比较和交换。
在现代计算机上,一般的应用很少使用堆排序,因为它无法利用局部性原理进行缓存,也就是数组元素很少和相邻的元素进行比较和交换。
## 小结
@@ -539,7 +539,7 @@ public class HeapSort<T extends Comparable<T>> extends Sort<T> {
| 选择排序 | × | N<sup>2</sup> | 1 | |
| 冒泡排序 | √ | N<sup>2</sup> | 1 | |
| 插入排序 | √ | N \~ N<sup>2</sup> | 1 | 时间复杂度和初始顺序有关 |
| 希尔排序 | × | N 的若干倍乘于递增序列的长度 | 1 | 改进版插入排序 |
| 希尔排序 | × | N 的若干倍乘以递增序列的长度 | 1 | 改进版插入排序 |
| 快速排序 | × | NlogN | logN | |
| 三向切分快速排序 | × | N \~ NlogN | logN | 适用于有大量重复主键|
| 归并排序 | √ | NlogN | N | |