Post

排序算法

快速排序

  • 思想:分治
    • 1、选一个基准
    • 2、头、尾指针遍历,小于基准在左边,大于基准在右边
    • 3、递归基准的左边、右边
  • 时间复杂度:最好情况每次递归都平分数组,一共需要递归logn次,每次需要n时间,复杂度为O(n*logn),最坏情况每次都把数组分成1和n-1,一共需要递归n次,每次需要n时间,总体复杂度为O(n^2)。平均总体时间复杂度为O(nlogn)。
  • 空间复杂度:和时间复杂度相关,每次递归需要的空间是固定的,总体空间复杂度即为递归层数,因此平均/最好空间复杂度为O(logn),最坏空间复杂度为O(n)
  • 稳定性:不稳定
  • 场景:小数据量排序

冒泡排序

  • 思想:双层遍历,逐个对比
    • 1、对比相临的数值,大者交换到后面
    • 2、重复对比
  • 时间复杂度:n^2
  • 空间复杂度:1
  • 稳定性:稳定

归并排序

  • 思想:分治
    • 1、递归对半分组,交换位置
    • 2、归并megre分组后结果
  • 时间复杂度:任何情况下为O(nlogn)
  • 空间复杂度:n
  • 稳定性:稳定
  • 场景:大数据量排序

堆排序(堆:完全二叉树)

  • 思想:
    • 1、构建堆,(升序构建最大堆,降序构建最小堆)
    • 2、将堆顶元素下沉到数组尾部
    • 3、重新调整堆,重复下沉堆顶元素
  • 时间复杂度:O(nlogn)
  • 空间复杂度:原地排序,O(1)
  • 稳定性:不稳定
  • 场景:
This post is licensed under CC BY 4.0 by the author.