排序算法
算法比较 稳定性 插入排序,冒泡排序,二路归并排序和基数排序是稳定的排序方法; 选择排序,希尔排序,快速排序和堆排序是不稳定的排序方法; 复杂度 排序方法 平均时间 最坏情况 辅助空间 插入排序 O(n^2) O(n^2) O(1) 希尔排序 O(nlogn) O(nlogn) O(1) 冒泡排序 O(n^2) O(n^2) O(1) 快速排序 O(nlogn) O(n^2) O(logn) 选择排序 O(n^2) O(n^2) O(1) 堆排序 O(nlogn) O(nlogn) O(1) 归并排序 O(nlogn) O(nlogn) O(n) 基数排序 O(d(n+r)) O(d(n+r)) O(r+n) 方法选择 (1) 排序数据的规模n较大,关键字元素分布比较随机,并且不要求排序稳定性时,宜选用快速排序; (2) 排序数据规模n较大,内存空间又允许,并且有排序稳定性要求,宜采用归并排序; (3) 排序数据规模n较大,元素分布可能出现升序或者逆序的情况,并且对排序的稳定性不要求,宜采用堆排序或者归并排序; (4) 排序数据规模n较小,元素基本有序,或者分布也比较随机,并且有排序稳定性要求时,宜采用插入排序; (5) 排序数据规模n较小,对排序稳定性又不做要求时,宜采用选择排序; 算法实现 插入排序 插入是个比较容易理解的排序算法,每次取下一个未排序的数