更多请参考:
Sorting algorithm - Wikipedia
排序算法 - 维基百科,自由的百科全书
中英文内容略有差别,其中中文没有最好情况,但是在复杂度、稳定性的比较中考虑了是用数组还是链表存储。
复杂度及稳定性
排序方式 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 辅助空间 | 稳定性 |
---|
冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 不稳定 |
插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
希尔排序 | O(n^(4/3)) | O(nlogn) | O(n^(3/2)) | O(1) | 不稳定 |
快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
实现
抽象类
所有排序类继承于抽象类Sort
其中,nums
数组用于存放被排序的数;sort
方法用于实现排序,其中参数isDebug
用于声明是否输出每一轮的结果;
printNums
方法用于打印排序中间结果。
冒泡排序
传统冒泡排序
记忆最后更改位置的冒泡排序
选择排序
插入排序
希尔排序
快速排序
堆排序
分类总结
稳定性
稳定: 冒泡排序、插入排序
不稳定: 选择排序、快速排序、希尔排序、堆排序
平均时间复杂度
O(n^2): 冒泡排序、选择排序、插入排序
O(nlogn): 快速排序、堆排序
O(n^(4/3)): 希尔排序
辅助空间
O(1): 冒泡排序、选择排序、插入排序、堆排序
O(logn): 快速排序