各种内部排序算法的性质比较
算法 | 最好情况 | 最坏情况 | 平均情况 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
直接插入排序 | O(n) | O(n2) | O(n2) | O(1) | 稳定 |
冒泡排序 | O(n) | O(n2) | O(n2) | O(1) | 稳定 |
简单选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 |
希尔排序 | O(1) | 不稳定 | |||
快速排序 | O(nlog2n) | O(nlog2n) | O(n2) | O(log2n) | 不稳定 |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 |
二路归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
基数排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(r) | 稳定 |
各种内部排序算法的应用
关键字位置问题
直接插入排序、折半插入排序:在最后一趟排序前,没有一个关键字到达其最终位置
快速排序:每一趟排序后有一个关键字到达最终位置
归并排序:在一次排序结束后不一定能选出一个关键字放到其最终位置上
希尔排序:不能保证每趟排序至少能将一个关键字放到其最终位置上
适用情况
直接插入排序、冒泡排序:适用于序列基本有序的情况
快速排序:待排序列越接近无序,算法效率越高
简单选择排序、归并排序:执行次数与初试序列无关
堆排序:适合关键字数很多的情况
基数排序:适合序列中关键字很多,但组成关键字的取值范围较小的情况
欢迎补充~~~