内部排序的算法的时间复杂度,空间复杂度,稳定性的记忆方法:
(1) 时间复杂度:
以平均时间复杂度O(nlogn) 的速度排序快速排序、归并排序、堆排序,
希尔排序一般为O(n^3/2), 差的话就为O(n^2)
冒泡冒的好是O(n) ,冒得不好就是O(n^2)
直接插入插得好,就是O(n) ,直接插入插得不好就是O(n^2)
在所有同量级(O(nlogn) )的排序算法中,快排平均性能最好,若初始关键字有序或基本有序,快排蜕变为冒泡排序,此时算法平均复杂度为O(n^2)
(2) 空间复杂度:记住特殊的三个:
快速排序:O(logn) ;
归并排序:O(n)
基数排序:O(d(n+rd))
堆排序、直接插入排序、冒泡排序、直接选择排序、希尔排序:只需要一个记录大小的辅助空间
(3) 稳定性:快速排序、希尔排序、简单选择排序、堆排序不稳定,其他的全是稳定的。
简单排序一般是稳定排序,简单选择排序除外
复杂排序一般不稳定,归并排序除外
结论:
1. 待排序的记录数目n 较小时,可采用插入排序和选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序方法较好。
2. 若待排序记录关键字基本有序 ,则适合采用直接插入排序或者冒泡排序 。
3. 当n 很大而且关键字的位数较少时,采用链式基数排序较好。
4. 若n 较大,则采用时间复杂度为O(nlogn) 的排序方法:快速排序、堆排序或归并排序。快速排序是目前内部排序方法中最好的方法,当待排序的关键字为随机分布时,快速排序的平均运行时间最短 ;但堆排序只需1 个辅助存储空间,并且不会出现在快速排序中可能出现的最坏情况。这两种排序方法都是不稳定的排序方法,若要求排序稳定,可选择归并排序。通常可将归并排序和直接插入排序结合起来使用:先利用直接插入排序求得较长的有序子文件,然后再两两归并。因为直接插入排序是稳定的,所以改进的归并排序是稳定的
文章出处:http://blog.youkuaiyun.com/taizhoufox/article/details/4374333