排序算法比较
排序算法好多种,通过它们之间的比较掌握它们的适用场景,优缺点。时间复杂度参考geeksforgeeks
这篇博客会持续更新。
选择排序 vs 插入排序
大量交换 vs 最少交换
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。可以通过二分查找改进查找插入位置的效率。
插入排序需要反复移动数据,为新插入的数据提供空间。所以它的改进版本希尔排序通过将数据分为几个区域可以让数据在插入时就离最终位置更近一点,从而减少交换次数。(在希尔排序中,比较是最主要的操作,而不是交换)
选择排序首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序每次会将一个元素放到最终位置,所以至多进行n-1次交换。
但是选择排序必须进行n*(n-1)/2次比较操作。
分析:
共同点:二者都常常用于in-place的场景。最坏时间复杂度
O
(
n
2
)
O(n^2)
O(n2),平均时间复杂度
Θ
(
n
2
)
\Theta(n^2)
Θ(n2)。
不同点:
- 插入排序最坏交换 O ( n 2 ) O(n^2) O(n2)次。选择排序交换次数最多 n − 1 n-1 n−1次。
- 交换是插入排序的主要操作,比较是选择排序的主要操作。
- 插入排序最优时间复杂度 Ω ( n ) \Omega(n) Ω(n),选择排序最优时间复杂度是 Ω ( n 2 ) \Omega(n^2) Ω(n2).