排序算法的总结

排序算法的总结

各种排序算法的时间复杂度和空间复杂度的总结.

时间复杂度 额外空间复杂度 稳定性
选择排序 O(N^2) O(1)
冒泡排序 O(N^2) O(1)
插入排序 O(N^2) O(1)
归并排序 O(N*logN) O(N)
随机快排 O(N*logN) O(logN)
堆排序 O(N*logN) O(1)
计数排序 O(N) O(M)
基数排序 O(N) O(N)

排序算法的选择

  1. 不基于比较的排序, 对样本数据有严格要求, 不易改写
  2. 基于比较的排序, 只要规定好两个样本怎么比大小就可以直接复用
  3. 基于比较的排序, 时间复杂度的极限是 O(N*logN)
  4. 时间复杂度 O(N*logN) , 额外空间复杂度低于 O(N), 且稳定的基于比较的排序是不存在的.
  5. 为了绝对的速度选快排, 为了省空间选堆排, 为了稳定性选归并.

   转载规则


《排序算法的总结》 echi1995 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
多线程与高并发(三) 多线程与高并发(三)
多线程与高并发(三)多线程场景下的容器在Java日常开发中经常使用到容器. 下面就看看多线程场景下容器的选择 容器的选择Map容器一个场景: 100个线程, 每个线程向容器中添加10w条数据, 比较Hashtable,Collections
下一篇 
多线程与高并发(二) 多线程与高并发(二)
多线程与高并发(二)LongAdder先看一个例子 public class Test01 { static long count1 = 0; static AtomicLong count2 = new AtomicLo
  目录