CS-Notes 学习笔记
Java 后端 · Java 容器

常见排序算法的时间复杂度和稳定性是怎样的?

先自己想一想,再看参考要点

参考要点

  • 冒泡和插入排序稳定,平均和最坏 O(N²),数组已经有序时只需 O(N)
  • 选择排序不稳定,总是 O(N²)
  • 希尔排序是改进的插入排序,不稳定,最坏约 O(N^1.5)
  • 归并排序稳定,O(NlogN),需要 O(N) 的辅助空间
  • 堆排序不稳定,O(NlogN),额外空间 O(1),但不能利用局部性
  • 快速排序不稳定,期望 O(NlogN)、最坏 O(N²),递归栈 O(logN),内循环指令少、顺序访问数据,是最快的通用排序
  • 稳定性指相等的元素排序后保持原来的相对顺序,只交换相邻元素的冒泡、插入和相等时取左侧的归并是稳定的,远距离交换会越过相等的元素,例如选择排序把 [5a, 8, 5b, 2] 排成 [2, 5b, 5a, 8]
在学习站中自测这道题

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。