logologo

排序算法总结

Aug 21, 2023

时间复杂度额外空间复杂度稳定性
选择排序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. 为了绝对的速度选快排、为了省空间选堆排、为了稳定性选归并;

常见的坑

  1. 归并排序的额外空间复杂度可以变成 O(1),"归并排序" 内部缓存法,但是将变得不再稳定。
  2. "原地归并排序",会让时间复杂度变成 O(N^2);
浙ICP备2021022773号    2022-PRESENT © ZhengKe