排序算法的比较与选择
来源:互联网 发布:mac如何接受共享日历 编辑:程序博客网 时间:2024/05/16 14:57
1、插入排序:简单,时间复杂度O(n2),每次保证前n个元素有序然后将n+1个元素插入到前面的序列中。
可以证明:通过交换相邻元素进行排序的任何算法平均都需要O(n2)时间。所以提高插入排序的一种思路就是通过比较不相邻的元素进行排序,这就是希尔排序。
2、希尔排序:通过比较不相邻的元素来工作,各趟比较所使用的距离逐渐减小,称为增量序列。
不同增量序列对算法性能影响很大。一种简单的增量序列是n/2,n/4、、、1。Hibbard序列效果较好(如1,3,7、、,相邻增量没有公因子),最坏的时间复杂度为O(n3/2)。
3、有时不需要对所有元素都排序,只需要知道最大或最小即可,此时堆作为一种优先队列是最佳选择。
堆分为大顶堆和小顶堆。建堆时间复杂度为O(n),所谓的堆排序是从建好堆之后开始算的:每次取走堆顶元素,然后将最后一个元素放在堆顶并重新建堆,时间复杂度为O(nlogn)。由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
4、归并排序所需的比较次数是最少的O(nlogn):每次最多需要n-1次比较,经过logn轮归并后即可得到排序结果,在java中元素比较的开销较大,所以java类库中泛型排序一般就是用归并排序。
5、快速排序类似于二分查找是一种分治的思想,每次都会有一个元素进入其最终位置。在快排中,枢轴的选择十分关键。无知的选择是将第一个作为枢轴,如果待排元素是预排序的性能会很差。一种安全的做法是随机选取。选取首尾和中间元素的中值作为枢轴也是不错的选择。
参考:
1、建堆的过程:http://www.educity.cn/ky/sjjg/200812241135541065.htm
2、百度百科-堆排序:http://baike.baidu.com/view/157305.htm
3、白话经典算法系列之七堆与堆排序:http://blog.csdn.net/morewindows/article/details/6709644
4、建堆时间复杂度证明:http://hi.baidu.com/andey0307/item/2c6cf7f14abf8cc6a935a261
- 排序算法的比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 基本排序算法比较与选择
- 选择排序与冒泡排序的比较
- 插入排序与选择排序的比较
- 选择排序(排序算法--比较排序)
- 堆排序与直接选择排序的比较
- 简单选择排序与堆排序的比较
- 常见的八大排序算法的比较和选择依据
- 选择,插入,交换,冒泡,希尔排序算法的效率比较
- 选择 插入 快速 冒泡排序算法的比较
- findbugs
- Swing 带标题栏的右键菜单 增强版
- ubuntu12.10 安装hadoop1.0.4伪分布式
- 黑马程序员_java入门_位运算
- 国家测绘地理信息局黑龙江基础地理信息中心----网站访问情况
- 排序算法的比较与选择
- ShellExecute详解
- 几个带双下划线的宏
- 常见的C/C++ 编译器和两个环境
- findbugs ant 代码审核工具
- JQuery上传插件Uploadify
- Unity3D插件详细评测及教学下载
- java接口和抽象类特殊实现
- android面试题 不单单为了面试也是一次很好的学习