本文是关于各种排序以及其空间效率、时间效率、稳定性等的讨论
涉及到的排序有:
1.直接插入排序
2.折半插入排序
3.希尔排序
4.冒泡排序
5.快速排序
6.简单选择排序
7.堆排序
8.归并排序
9.基数排序
在考研书上,将直接插入排序、折半插入排序与希尔排序统一归为插入排序。
1.直接插入排序
-
基本要点:每次将一个待排记录按关键字大小插入前面已排好序的子序列中
-
空间效率:O(1)
-
平均时间效率:O(n2);当元素顺序时,可达到最优时间效率O(n);当元素逆序时,可达到最差时间效率O(n2)
-
稳定性√
-
比较次数取决初始状态√
-
移动次数取决初始状态√
2.折半插入排序 -
空间效率:O(1)
-
平均时间效率:O(n2)
-
稳定性√
-
比较次数取决初始状态× (取决与表中元素个数,约为O(nlog2n))
-
移动次数取决初始状态√
-
利用到了顺序存储的随机存储
3.希尔排序(减小增量排序) -
基本要点:相隔某个增量的记录组成一个子表,基本有序后再进行一趟直接插入排序
-
空间效率:O(1)
-
平均时间效率:O(n1.3) (了解即可)
-
稳定性×
-
比较次数取决初始状态√
-
移动次数取决初始状态√
-
利用到了顺序存储的随机存储
在考研书上,将冒泡排序、快速排序统一称为交换排序。
4.冒泡排序
-
基本要点:每趟排序都可以将一个元素放到最终位置上
-
空间效率:O(1)
-
平均时间效率:O(n2);当元素顺序时,可达到最优时间效率O(n);当元素逆序时,可达到最差时间效率O(n2)
-
稳定性√
-
比较次数取决初始状态√
-
移动次数取决初始状态√
5.快速排序 -
基本要点:每趟排序后将枢轴元素放到最终位置上
-
平均空间效率:O(log2n);最优空间效率O(log2n);最差空间效率O(n)
-
平均时间效率:O(nlog2n);可达到最优时间效率O(nlog2n);当元素基本有序时,可达到最差时间效率O(n2)
-
稳定性×
-
比较次数取决初始状态√
-
移动次数取决初始状态√
6.简单选择排序
- 基本要点:第i趟即从L[i…n]中选择关键字最小的元素和L[i]交换,每趟确定一个元素的最终位置
- 空间效率:O(1)
- 平均时间效率:O(n2)
- 稳定性×
- 比较次数取决初始状态× (始终是n(n-1)/2次)
- 移动次数取决初始状态√
7.堆排序
- 空间效率:O(1)
- 时间效率:O(nlog2n),其中建堆O(n),调整O(log2n)
- 稳定性×
- 比较次数取决初始状态√
- 移动次数取决初始状态√
- 利用到了顺序存储的随机存储
8.归并排序(外部排序)
- 基本要点:将两个或两个以上的有序表组合成一个新的有序表
- 空间效率:O(n)
- 时间效率:O(nlog2n),其中进行[O(log2n)]趟归并(向上取整),每趟归并O(n)
- 稳定性√
- 比较次数取决初始状态×
- 移动次数取决初始状态√
9.基数排序
- 基本要点:基于关键字各位大小进行排序
- 空间效率:O( r) 其中r是基数
- 时间效率:O(d(n+r),其中d趟分配收集,一趟分配O(n),一趟收集O( r)
- 稳定性√
- 移动次数取决初始状态√
以上就是本文全部内容,如有错误,欢迎讨论指正!