mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-25 00:56:29 +08:00
Update the insertion sort.
This commit is contained in:
parent
588980af86
commit
5dff1bd0e8
2 changed files with 4 additions and 6 deletions
|
@ -1,4 +1,3 @@
|
|||
|
||||
/**
|
||||
* File: radix_sort.cpp
|
||||
* Created Time: 2023-03-26
|
||||
|
|
|
@ -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)$ 。**如果给定一组部分有序的数据,插入排序通常比选择排序效率更高**。
|
||||
|
|
Loading…
Reference in a new issue