根据带排序数据是否全部放入内存,排序分为内排序和外排序。
下面就根据我看书的体会,主要分析内排序的性能。
内排序的种类:插入排序(直接插入排序,希尔排序),选择排序(简单选择排序、堆排序),交换排序(冒泡排序、快速排序),归并排序。
其中用的比较多的是插入排序、归并排序、快速排序。
排序算法的比较:性能的比较可以从以下5个方面进行分析:时间复杂度(平均情况、最好情况、最差情况),空间复杂度(辅助空间),稳定性。
平均情况角度,三种改进算法胜过希尔排序,并且远好于三种简单算法。
最好情况角度,冒泡和直接插入排序更胜一筹,就是说,在待排序数据基本有序的情况下,反而不应该使用四种复杂算法。
最坏情况角度,堆排序和归并排序要更胜一筹。
空间复杂度角度,归并排序强调要想跑的快,必须给足够的空间;快速排序也有相应的空间复杂度的要求;相比之下,堆排序空间复杂度职位O(1),少量索取,大量付出型。因此,在算法执行环境非常在乎内存使用量的情况下,选择堆排序是个不错的选择,归并排序和快速排序就不是最佳选择了。
稳定性角度,归并排序独占鳌头。对算法稳定性要求很高的情况下,归并排序是不二选择。
待排序记录的个数角度,记录数越小,越应该选择简单排序。例如,在对快速排序进行优化的时候,其中就有一个方面就是在记录数小于一定阀值的情况下,应该使用插入排序。
移动次数角度,简单选择排序优势就很大。
原文地址:http://blog.csdn.net/simongeek/article/details/45532131