排序(Sorting)问题是我们再业务开发中遇到的最基本问题,因此成为各大IT公司招聘笔试面试必考内容之一。笔者也借着校园招聘对数据结构这一章节的复习对排序问题进行一个简单的总结,然后基于Java进行实现。
排序分类
排序
插入排序
- 直接插入排序
- 折半插入排序
- 表插入排序
- 希尔排序
交换排序
- 冒泡排序
- 快速排序
选择排序
- 直接选择排序
- 堆排序
- 归并排序
排序时间复杂度和空间复杂度
类别 | 平均时间 | 最坏时间 | 辅助空间 |
---|---|---|---|
直接插入排序 |
O(n2)
|
O(n2)
|
O(1)
|
直接选择 |
O(n2)
|
O(n2)
|
O(1)
|
快速排序 |
O(nlog2n)
|
O(n2)
|
O(log2n)
|
堆排序 |
O(log2n)
|
O(log2n)
|
O(1)
|
归并排序 |
O(nlog2n)
|
O(nlog2n)
|
O(n)
|