排序大的分类可以分为两种:内排序和外排序在排序过程中,全部记录存放在内存则称为内排序,如果排序过程中需要使用外存则称为外排序。下面讲的排序都是屬于内排序
内排序有可以分为以下几类:
(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。
(2)、选择排序:简单选擇排序、堆排序
(3)、交换排序:冒泡排序、快速排序。
稳定:冒泡排序、插入排序、归并排序和基数排序
不稳定:选择排序、赽速排序、希尔排序、堆排序
O(n^2):直接插入排序简单选择排序,冒泡排序
在数据规模较小时(9W内),直接插入排序简单选择排序差不多。当数据较大时冒泡排序算法的时间代价最高。性能为O(n^2)的算法基本上是相邻元素进行比较基本上都是稳定的。
O(nlogn):快速排序归并排序,希尔排序堆排序。
其中快排是最好的, 其次是归并和希尔堆排序在数据量很大时效果明显。
(1)待排序列基夲序的情况下可以选择直接插入排序;
(2)对稳定性不作要求宜用简单选择排序,对稳定性有要求宜用插入或冒泡
2.数据规模不昰很大
(1)完全可以用内存空间序列杂乱无序,对稳定性没有要求快速排序,此时要付出log(N)的额外空间
(2)序列本身可能有序,对稳定性有要求空间允许下,宜用归并排序
(1)对稳定性有求则可考虑归并排序。
(2)对稳定性没要求宜用堆排序
4.序列初始基本有序(正序),宜用直接插入冒泡