Update the insertion sort.

This commit is contained in:
krahets 2023-05-24 00:33:27 +08:00
parent 588980af86
commit 5dff1bd0e8
2 changed files with 4 additions and 6 deletions

View file

@ -1,4 +1,3 @@
/**
* File: radix_sort.cpp
* Created Time: 2023-03-26

View file

@ -87,14 +87,13 @@
## 插入排序优势
插入排序的时间复杂度为 $O(n^2)$ ,而我们即将学习的快速排序的时间复杂度为 $O(n \log n)$ 。尽管插入排序的时间复杂度相比快速排序更高,**但在数据量较小的情况下,插入排序通常更快**。这是因为快速排序属于基于分治的排序算法,包含更多单元计算操作。而在数据量较小时,复杂度中的常数项起主导作用。这个现象与线性查找和二分查找的适用情况相似。
插入排序的时间复杂度为 $O(n^2)$ ,而我们即将学习的快速排序的时间复杂度为 $O(n \log n)$ 。尽管插入排序的时间复杂度相比快速排序更高,**但在数据量较小的情况下,插入排序通常更快**。
实际上,许多编程语言(例如 Java的内置排序函数都采用了插入排序大致思路为
这个结论与线性查找和二分查找的适用情况的结论类似。快速排序这类 $O(n \log n)$ 的算法属于基于分治的排序算法,往往包含更多单元计算操作。而在数据量较小时,$n^2$ 和 $n \log n$ 的数值比较接近,复杂度不占主导作用;每轮中的单元计算操作数量起到决定性因素。
- 对于长数组,采用基于分治的排序算法,例如快速排序,时间复杂度为 $O(n \log n)$
- 对于短数组,直接使用插入排序,时间复杂度为 $O(n^2)$
实际上,许多编程语言(例如 Java的内置排序函数都采用了插入排序大致思路为对于长数组采用基于分治的排序算法例如快速排序对于短数组直接使用插入排序。
虽然冒泡排序、选择排序和插入排序的时间复杂度都为 $O(n^2)$ ,但在实际情况中,插入排序出现的频率远远高于冒泡排序和选择排序。这是因为:
虽然冒泡排序、选择排序和插入排序的时间复杂度都为 $O(n^2)$ ,但在实际情况中,**插入排序的使用频率显著高于冒泡排序和选择排序**。这是因为:
- 冒泡排序基于元素交换实现,需要借助一个临时变量,共涉及 3 个单元操作;插入排序基于元素赋值实现,仅需 1 个单元操作。因此,**冒泡排序的计算开销通常比插入排序更高**。
- 选择排序在任何情况下的时间复杂度都为 $O(n^2)$ 。**如果给定一组部分有序的数据,插入排序通常比选择排序效率更高**。