软件设计师-排序

186 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

直接插入排序

  • 不归位,即每排完一次序,不能确定某个元素的最终位置
  • 稳定,即序列中两个值相同的元素在排序前后相对位置不变
  • 平均时间复杂度:O(n2)O(n^2)
  • 最坏时间复杂度:O(n2)O(n^2)
  • 最好时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

image.png

希尔排序

  • 不稳定,即序列中两个值相同的元素在排序前后不一定能保持相对位置不变
  • 不归位,即每排完一次序,不能确定某个元素的最终位置
  • 平均时间复杂度:O(n1.3)O(n^1.3)
  • 最坏时间复杂度:O(n2)O(n^2)
  • 最好时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

image.png

image.png

计数排序

image.png

简单选择排序

  • 不稳定,即序列中两个值相同的元素在排序前后不一定能保持相对位置不变
  • 可以归位,即每一次排序都可以确定一个元素的最终位置
  • 平均时间复杂度:O(n2)O(n^2)
  • 最坏时间复杂度:O(n2)O(n^2)
  • 最好时间复杂度:O(n2)O(n^2)
  • 空间复杂度:O(1)O(1)

image.png

堆排序

  • 不稳定,即序列中两个值相同的元素在排序前后不一定能保持相对位置不变
  • 可以归位,即每一次排序都可以确定一个元素的最终位置
  • 平均时间复杂度:O(nlgn)O(nlgn)
  • 最坏时间复杂度:O(nlgn)O(nlgn)
  • 最好时间复杂度:O(nlgn)O(nlgn)
  • 空间复杂度:O(1)O(1)

image.png

冒泡排序

  • 稳定,即序列中两个值相同的元素在排序前后相对位置不变
  • 可以归位,即每一次排序都可以确定一个元素的最终位置
  • 平均时间复杂度:O(n2)O(n^2)
  • 最坏时间复杂度:O(n2)O(n^2)
  • 最好时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

image.png

快速排序

  • 是一种分治算法
  • 可以归位,即每一次排序都可以确定一个元素的最终位置
  • 不稳定,即序列中两个值相同的元素在排序前后不一定能保持相对位置不变
  • 平均时间复杂度:O(nlgn)O(nlgn)
  • 最坏时间复杂度:O(n2)O(n^2)
  • 最好时间复杂度:O(nlgn)O(nlgn)
  • 空间复杂度:最好:O(lgn)O(lgn),最坏:O(n)O(n)

image.png

归并排序

  • 是一种分治算法
  • 不归位,每次排序不能确定某一元素的最终位置
  • 稳定,即序列中两个值相同的元素在排序前后相对位置不变
  • 平均时间复杂度:O(nlgn)O(nlgn)
  • 最坏时间复杂度:O(nlgn)O(nlgn)
  • 最好时间复杂度:O(nlgn)O(nlgn)
  • 空间复杂度:O(n)O(n)

image.png