排序算法基本思想
2015-06-17 14:54
225 查看
内部排序:全部待排序记录都可以同时调入内存进行的排序。
外部排序:待排序记录的数量太大,以致无法将其同时调入内存,尚需访问外存的排序过程。
排序中的基本操作:
1. 比较关键字大小 (对大多数排序算法是必须的)
2. 移动记录 (可通过改变记录的存储方式避免)
待排序记录的存储方式:
1. 存储在地址连续的一组存储单元中,记录之间的次序由存储位置决定,排序必须移动记录;
2. 存在静态链表中,记录之间的次序关系由指针指示,排序不同移动记录,仅需修改指针;(链表排序)
3. 待排序记录本身存储在一组地址连续的存储单元内,同时附设一个指示记录存储位置的地址向量,排序过程中不移动记录,而移动指向向量中这些记录的地址,在排序结束后,再按照地址向量中的值调整记录的存储位置。(地址排序)
内部排序算法按依据的原则不同分类:
插入排序、交换排序、归并排序、选择排序、基数排序
排序算法的评价标准:
1. 时间开销 (最重要的开销,可以用比较和移动次数衡量)
2. 附加空间
![](http://images0.cnblogs.com/blog2015/686769/201506/171429558732693.png)
基数排序是稳定的内排方法,所有时间复杂度为O(N2)的简单排序算法也是稳定的,而快排、堆排序和希尔排序等时间性能较好的排序算法是不稳定的。堆排序是一种稳定的排序算法。
外部排序:待排序记录的数量太大,以致无法将其同时调入内存,尚需访问外存的排序过程。
排序中的基本操作:
1. 比较关键字大小 (对大多数排序算法是必须的)
2. 移动记录 (可通过改变记录的存储方式避免)
待排序记录的存储方式:
1. 存储在地址连续的一组存储单元中,记录之间的次序由存储位置决定,排序必须移动记录;
2. 存在静态链表中,记录之间的次序关系由指针指示,排序不同移动记录,仅需修改指针;(链表排序)
3. 待排序记录本身存储在一组地址连续的存储单元内,同时附设一个指示记录存储位置的地址向量,排序过程中不移动记录,而移动指向向量中这些记录的地址,在排序结束后,再按照地址向量中的值调整记录的存储位置。(地址排序)
内部排序算法按依据的原则不同分类:
插入排序、交换排序、归并排序、选择排序、基数排序
排序算法的评价标准:
1. 时间开销 (最重要的开销,可以用比较和移动次数衡量)
2. 附加空间
![](http://images0.cnblogs.com/blog2015/686769/201506/171429558732693.png)
排序方法 | 平均时间复杂度 | 最好情况时间复杂度 | 最坏情况时间复杂度 | 空间复杂度 | 稳定性 | |
插入排序 | 直接插入 | O(n2) | O(n) | O(n2) | O(1) | 稳定 |
折半插入 | O(n2) | O(1) | 稳定 | |||
希尔排序 | O(n1.3) | O(1) | 不稳定 | |||
交换排序 | 冒泡排序 | O(n2) | O(n) | O(n2) | O(1) | 稳定 |
快速排序 | O(nlogn) | O(n2) | O(logn) | 不稳定 | ||
选择排序 | 简单选择排序 | O(n2) | O(1) | 稳定 | ||
堆排序 | O(nlogn) | O(1) | 不稳定 | |||
归并排序 | 2-路归并 | O(nlogn) | O(n) | 稳定 |
相关文章推荐
- (笔试题)合法字符串
- RequireJS 文件合并压缩
- Java操作HTML格式字符串的标签和属性
- Java Keytool使用方法
- WIN8系统域用户加入本机Administrators组的方法
- 自定义注解做数据验证
- 虚拟机Nat网络模式下本地连接显示为网络电缆被拔出
- Android利用Fiddler进行网络数据抓包
- php扩展开发
- java JdbcTemplate源码
- WCF 宿主与通信模式(二)
- Selenium2学习-012-WebUI自动化实战实例-010-解决元素失效:StaleElementReferenceException: stale element reference: element is not attached to the page document
- 设计模式之Adapter模式(笔记)
- SVG基础 | SVG PATH 元素
- jQuery实现复选框批量选择与反选的方法
- 【伊利丹】Hadoop-2.5.0-CDH5.2.0/Hive与Hbase整合实验
- xcode指令集设置
- 机器学习中的相似性度量
- 托盤
- redhat7基本命令操作