1、 堆排序每趟总能选出一个最大值或者最小值位于根结点。
冒泡排序总是两两比较选出一个最小值位于数组前面。(第一趟排序后最大值会在最后面,第二趟次最大值在次最后面)
选择排序(第一趟排序之后最小值会在最前面,第二趟排序会在次前面)
快排选出的枢轴在一趟排序中就位于最终的位置。(以一个值为分界点)
直接插入排序不一定位于最终的位置,因为不确定后面插入的元素对于前面的元素是否有影响。(特征第一趟排序范围为0~1,前一个数比后一个小,第二趟排序范围0~2,前三个数从小到大排列)
2、 关键字比较的次数与记录的初始排列次序无关的是:选择排序(每一趟从待排序的数据元素中选择最小(最大)的一个元素,顺序放在已排好序的数列最后,直到全部待排序的数据元素排完。可以看到,每次都是遍历一遍剩下要排序的部分,找出其最大值或最小值。所以关键码比较次数与记录的初始排列无关);
有关的是希尔排序、冒泡排序、直接插入排序、归并排序。
3、 基本有序情况下对插入排序是最好的。
4、 归并排序和输入无关,线性对数级别。
逆序是插入的最坏情况。
冒泡和选择输入无关。
5、 快排的平均时间复杂性为O(nlogn),平均空间复杂性为O(log n)
(自己参考《妙趣横生的算法》还有点击打开链接所)
排序算法 | 平均时间 | 最坏情况 | 空间需求 | 稳定性 |
直接插入排序 | n^2 | n^2 | 1 | 稳定 |
希尔排序 | n^1.5 | n^2 | 1 | 不稳定 |
冒泡排序 | n^2 | n^2 | 1 | 稳定 |
快排 | nlogn | n^2 | logn | 不稳定 |
简单选择排序 | n^2 | n^2 | 1 | 不稳定 |
堆排序 | nlogn | nlogn | 1 | 不稳定 |
归并排序 | nlogn | nlogn | 1 | 稳定 |
基数排序 | d(r+n) | d(r+n) | rd+n | 稳定 |