排序算法通过了很长时间的演变,产生了不少种不一样的方法。对于初学者来讲,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。所以,咱们颇有必要对全部常见的排序算法进行概括。算法
排序大的分类能够分为两种:内排序和外排序。在排序过程当中,所有记录存放在内存,则称为内排序,若是排序过程当中须要使用外存,则称为外排序。下面讲的排序都是属于内排序。atom
内排序有能够分为如下几类:spa
(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。xml
(2)、选择排序:直接选择排序、堆排序。blog
(3)、交换排序:冒泡排序、快速排序。排序
(4)、归并排序图片
(5)、基数排序内存
表格版:table
排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 | 复杂性 |
---|---|---|---|---|---|---|
直接插入排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 稳定 | 简单 |
希尔排序 | O(nlog2n)O(nlog2n) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 不稳定 | 较复杂 |
直接选择排序 | O(n2)O(n2) | O(n2)O(n2) | O(n2)O(n2) | O(1)O(1) | 不稳定 | 简单 |
堆排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(1)O(1) | 不稳定 | 较复杂 |
冒泡排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 稳定 | 简单 |
快速排序 | O(nlog2n)O(nlog2n) | O(n2)O(n2) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | 不稳定 | 较复杂 |
归并排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(n)O(n) | 稳定 | 较复杂 |
基数排序 | O(d(n+r))O(d(n+r)) | O(d(n+r))O(d(n+r)) | O(d(n+r))O(d(n+r)) | O(n+r)O(n+r) | 稳定 | 较复杂 |
图片版:class