diff --git a/codes/cpp/chapter_sorting/radix_sort.cpp b/codes/cpp/chapter_sorting/radix_sort.cpp index 0b52cc4e7..927922c17 100644 --- a/codes/cpp/chapter_sorting/radix_sort.cpp +++ b/codes/cpp/chapter_sorting/radix_sort.cpp @@ -1,4 +1,3 @@ - /** * File: radix_sort.cpp * Created Time: 2023-03-26 diff --git a/docs/chapter_sorting/insertion_sort.md b/docs/chapter_sorting/insertion_sort.md index f2fa8d0cf..7de52cb70 100755 --- a/docs/chapter_sorting/insertion_sort.md +++ b/docs/chapter_sorting/insertion_sort.md @@ -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)$ 。**如果给定一组部分有序的数据,插入排序通常比选择排序效率更高**。