Java List是继承了Collection接口同时扩展定义为有序集合的接口, 这里我们分析下它的排序实现
定论
List | 是否有序 | 排序方法 | 排序是否稳定 |
---|
ArrayList(Vector) | 是 | 归并排序 | 是 |
LinkedList | 是 | 归并排序 | 是 |
TreeSet | 是 | 二叉树 | X |
TreeMap | 是 | 二叉树 | X |
List 如何实现排序?
Java 里面的排序主要看Arrays.sort方法
排序逻辑如下图
![Arrays.sort排序逻辑](https://i-blog.csdnimg.cn/blog_migrate/3d3b74fe1c0867fa1ff2cac89e84ce2c.png#pic_center)
常见排序算法
排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
---|
冒泡排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 稳定 |
选择排序 | O(n2)O(n2) | O(n2)O(n2) | O(n2)O(n2) | O(1)O(1) | 不稳定 |
插入排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 稳定 |
二分插入排序 | O(nlog2n) | O(n2) | O(log2n) | O(n+k) | 稳定 |
希尔排序 | O(n1.3)O(n1.3) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 不稳定 |
快速排序 | O(nlog2n)O(nlog2n) | O(n2)O(n2) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | 不稳定 |
归并排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(n)O(n) | 稳定 |
堆排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(1)O(1) | 不稳定 |
基数排序 | O(n∗k)O(n∗k) | O(n∗k)O(n∗k) | O(n∗k)O(n∗k) | O(n+k)O(n+k) | 稳定 |