List 下子类排序涉及的一些问题

Java List是继承了Collection接口同时扩展定义为有序集合的接口, 这里我们分析下它的排序实现

定论

List 是否有序 排序方法 排序是否稳定
ArrayList(Vector) 归并排序
LinkedList 归并排序
TreeSet 二叉树 X
TreeMap 二叉树 X

List 如何实现排序?

Java 里面的排序主要看Arrays.sort方法

排序逻辑如下图

List 下子类排序涉及的一些问题_第1张图片

常见排序算法

排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性
冒泡排序 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) 稳定

你可能感兴趣的:(Java)