H面试(20): 排序总结

来源:互联网 发布:单代号搭接网络计划 编辑:程序博客网 时间:2024/06/06 01:01

内部排序的算法的时间复杂度,空间复杂度,稳定性的记忆方法:
(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.csdn.net/taizhoufox/article/details/4374333

原创粉丝点击