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
- H面试(20): 排序总结
- H面试程序(17): 堆排序
- H面试程序(18): 归并排序
- H面试程序(14): 快速排序法
- H面试程序(15): 冒泡排序法
- H面试程序(16): 简单选择排序
- H面试的基础知识(1):一些基础知识的总结
- 大数查找排序总结(c++面试)
- 面试中的排序算法总结(二)
- 面试总结:冒泡排序
- 算法--排序--面试总结
- 面试排序算法总结
- 排序算法总结面试(二)
- 常见面试排序算法总结
- 面试中的排序算法总结
- 面试中的排序算法总结
- 排序算法--面试总结分析
- 面试中的排序算法总结
- LC滤波器与RC滤波器的区别
- 我常犯的错误
- asp.net+javascript滚动新闻(详细实现)by C#
- ios平台播放。MP3音乐
- 按键设备驱动—我的学习资料
- H面试(20): 排序总结
- 数学知识
- 把应用安装到Android系统目录下
- qemu增加镜像磁盘
- 基于Xfire SOAP Header的WebService安全验证(xfire服务端,jax-ws和xfire两种客户端)
- 【C++学习笔记】简单的多线程程序(摘自孙鑫C++教学视频)
- Jquery绑定事件(bind和live的区别)
- hdu 4427 Math Magic(简单DP注意细节)
- 需求分析挑战之旅(疯狂的订餐系统)(1)——某IT公司员工的吃饭问题