一、性质对比

补充: 折半插入排序 O(n) O(n^2) O(n^2) O(1) 是
(折半插入排序和直接插入排序的异同:
相同点:
排序总趟数取决于元素的个数n,都是n-1趟;
元素的移动次数都取决于初始序列,两者相同;
辅助空间的都是常数级,O(1)。
不同点:
| 查找插入位置 | 比较次数 | |
| 折半插入排序 | 折半查找 | O(nlog n)(以2为底) |
| 直接插入排序 | 顺序查找 | O(n)~ O(n^2) |
(1)稳定性
插冒归,很稳定;
(2)时间复杂度
选冒插,很方(平均情况);快归堆,nlog。
(3)空间复杂度
快速排序为O(log n)(以2为底),二路归并排序O(n),基数排序为O(r)。其它为
O(1)。
快速排序最坏空间复杂度为O(n)
(4)适用存储结构
仅适用于顺序存储:折半插入排序、希尔排序、快速排序和堆排序。
既适用于顺序存储,又适用于链式存储:直接插入排序、冒泡排序、简单选择排序、归并排序和基数排序。
(5)排序算法的比较次数和移动次数(最好情况、最坏情况)
1)直接插入排序
比较次数:最好情况下,需要的比较次数为 n-1;最坏情况下,所需的比较次数为n(n-1)/2。
移动次数:移动次数取决于表的初始状态。
2)冒泡排序
最好情况下,比较次数为n-1,移动次数为0;最坏情况下(初始序列为逆序时),需要n-1趟排序,第i趟排序要进行n-i次关键字比较,每次比较后都必须移动元素3次来交换元素位置。

3)简单选择排序
移动次数:元素移动的操作次数很少,不会超过3(n-1)次(O(n)),其中最好情况下,移动0次,此时对应的表已经有序;
比较次数:但是元素间比较的次数与序列的初始状态无关,始终是n(n-1)/2次。(O(n^2))
(6)与初始状态无关
排序过程中的比较次数与序列初始状态无关的是简单选择排序(n(n-1)/2)、基数排序、归并排序。
排序趟数与序列的原始状态无关的排序方法是直接插入排序、简单选择排序、基数排序。
直接插入排序和简单选择排序的排序趟数都是n-1。
折半插入排序的总比较次数一定,是O(nlog n)。
(7)每一趟可以确定一个元素的最终位置
堆排序、冒泡排序、简单选择排序(确定一个最大值或最小值) --确定绝对位置
快速排序(每一趟确定一个元素(随机)的最终位置)--确定绝对位置
直接插入排序并不能一趟确定一个绝对位置,每次都在确定一个元素的相对位置
(8)其它
快速排序是所有内部排序算法中平均性能最优的排序算法。
基数排序不需要关键字的比较。
最坏情况下,空间复杂度为O(n)的是归并排序和快速排序。
平均情况下,空间复杂度为O(n)的是归并排序。
基数排序必须是整数.
在基本有序的情况下,直接插入排序的时间复杂度为O(n),
归并排序不管怎么样,时间复杂度都是O(n log n);
快速排序,在基本有序的情况下,是最坏情况,O(n^2)。
在最好情况下,时间复杂度可以到达线性时间的有冒泡排序和直接插入排序,都是O(n)。
421

被折叠的 条评论
为什么被折叠?



