希尔排序比冒泡排序快5倍,比插入排序快约2倍,比快排、归并排序、堆排序慢不少。适合数据量不大于5000,速度不是特别重要的场合。对数据量较小的数列重复排序是很是好的。算法
归并排序比堆排序还要快一点,所以比快排、希尔也要快。可是须要内存空间大,比堆排序须要多一倍的内存空间,由于须要一个额外的数组。数组
快排是递归的,因此不适合内存很是有限的状况。spa
堆排序不须要大量递归或者多维数组暂存数据,适合数据量很是巨大的序列,快排、归并都须要递归来设计算法,数据量很是大的时候,容易发生堆栈溢出。 设计
堆排序适合大量数据排序,百万级别,特别是在大量数据中找出前N大或前N小的排序。通常找出前N大,须要用小堆;找出前N小,须要用大堆。排序
排序法递归 |
平均时间内存 |
最差情形ci |
稳定度table |
额外空间效率 |
备注 |
冒泡 |
O(n2) |
O(n2) |
稳定 |
O(1) |
n小时较好 |
交换 |
O(n2) |
O(n2) |
不稳定 |
O(1) |
n小时较好 |
选择 |
O(n2) |
O(n2) |
不稳定 |
O(1) |
n小时较好 |
插入 |
O(n2) |
O(n2) |
稳定 |
O(1) |
大部分已排序时较好 |
基数 |
O(logRB) |
O(logRB) |
稳定 |
O(n) |
B是真数(0-9),R是基数(个十百) |
Shell |
O(nlogn) |
O(ns) 1<s<2 |
不稳定 |
O(1) |
s是所选分组 |
快速 |
O(nlogn) |
O(n2) |
不稳定 |
O(nlogn) |
n大时较好 |
归并 |
O(nlogn) |
O(nlogn) |
稳定 |
O(1) |
n大时较好 |
堆 |
O(nlogn) |
O(nlogn) |
不稳定 |
O(1) |
n大时较好 |