mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-13 18:00:18 +08:00
build
This commit is contained in:
@@ -207,16 +207,16 @@ comments: true
|
||||
|
||||
在插入操作中,我们会将元素插入到相等元素的右边,不会改变它们的次序,因此是“稳定排序”。
|
||||
|
||||
## 11.3.3. 插入排序 vs 冒泡排序
|
||||
## 11.3.3. 插入排序优势
|
||||
|
||||
回顾「冒泡排序」和「插入排序」的复杂度分析,两者的循环轮数都是 $\frac{(n - 1) n}{2}$ 。但不同的是:
|
||||
|
||||
- 冒泡操作基于 **元素交换** 实现,需要借助一个临时变量实现,共 3 个单元操作;
|
||||
- 插入操作基于 **元素赋值** 实现,只需 1 个单元操作;
|
||||
|
||||
因此,可以粗略估计出冒泡排序的计算开销约为插入排序的 3 倍,因此更受欢迎。实际上,许多编程语言(例如 Java)的内置排序函数都使用到了插入排序,大致思路为:
|
||||
粗略估计,冒泡排序的计算开销约为插入排序的 3 倍,因此插入排序更受欢迎,许多编程语言(例如 Java)的内置排序函数都使用到了插入排序,大致思路为:
|
||||
|
||||
- 对于 **长数组**,采用基于分治的排序算法,例如「快速排序」,时间复杂度为 $O(n \log n)$ ;
|
||||
- 对于 **短数组**,直接使用「插入排序」,时间复杂度为 $O(n^2)$ ;
|
||||
|
||||
**在数据量较小时插入排序更快**,这是因为复杂度中的常数项(即每轮中的单元操作数量)占主导作用。这个现象与「线性查找」和「二分查找」的情况类似。
|
||||
虽然插入排序比快速排序的时间复杂度更高,**但实际上在数据量较小时插入排序更快**,这是因为复杂度中的常数项(即每轮中的单元操作数量)占主导作用。这个现象与「线性查找」和「二分查找」的情况类似。
|
||||
|
||||
Reference in New Issue
Block a user