一、冒泡排序(Bubble Sort)

  • 核心思想:重复遍历数组,两两比较相邻元素,逆序就交换,气泡一样慢慢“浮”到数组顶端。
  • 时间复杂度:最坏O(n²),最好 O(n)
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 特点:代码最简单,但效率极低,适合学习演示。

二、插入排序(Insertion Sort)

  • 核心思想:把数组分成已排序区和未排序区,每次拿未排序的第一个数,插入到已排序区的正确位置。
  • 时间复杂度:最坏O(n²),最好 O(n)(数据大致有序时极快)
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 特点:小规模数据、大致有序的数据表现极好。

三、希尔排序(Shell Sort)

  • 核心思想:对插入排序的改进。先按一个增量(间隔)分组,每组做插入排序;再不断缩小增量,直到增量为 1,变成普通插入排序。
  • 时间复杂度:介于 O(nlogn) ~ O(n²) 之间(和增量序列有关)
  • 空间复杂度:O(1)
  • 稳定性:不稳定
  • 特点:比直接插入排序快得多。

四、快速排序(Quick Sort)

  • 核心思想:选一个基准值pivot,把数组分成【小于pivot】和【大于pivot】两部分,再递归处理左右子数组。
  • 时间复杂度:平均O(nlogn),最坏O(n²)(可通过随机基准避免)
  • 空间复杂度:O(logn)(递归栈)
  • 稳定性:不稳定
  • 特点:面试高频,常用,是大多数语言标准库排序的核心。

五、归并排序(Merge Sort)

  • 核心思想:先拆分,再合并。把数组一直拆成单个元素,再两两合并成有序序列,层层归并。
  • 时间复杂度:最好/最坏/平均都是O(nlogn)
  • 空间复杂度:O(n)(需要额外数组)
  • 稳定性:稳定
  • 特点:效率稳定、稳定排序,适合对稳定性有要求、数据量大的场景。

六、堆排序(Heap Sort)

  • 核心思想:把数组构建成大顶堆,每次把堆顶最大值放到末尾,再调整剩余元素为堆,重复直到有序。
  • 时间复杂度:最好/最坏都是 O(nlogn)
  • 空间复杂度:O(1)(原地堆排序)
  • 稳定性:不稳定
  • 特点:不用额外空间、效率稳定,适合大数据量、内存紧张的场景。

标签: none

添加新评论