排序基本概念
排序:将一组杂乱无章的数据按一定的规律顺次排列起来。
数据表( data list)::它是待排序数据对象的有限集合。
排序码(key):通常数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据。该域即为排序码。每个数据表用哪个属性域作为排序码,要视具体的应用需要而定。
排序算法分析
1. 排序算法的稳定性
如果在元素序列中有两个元素R[i]和R[j],它们的排序码K[i] == k[j],且在排序之前,元素R[i]在R[j]的前面。如果在排序之后,元素R[i]仍在R[j]之前,则称这个排序算法是稳定的,否则称这个排序算法是不稳定的。
2. 排序算法评价依据
时间复杂度
- 排序的时间复杂度可用算法执行中的数据比较次数与数据移动次数来衡量。
- 算法运行时间代价的大略估算一般都按平均情况进行估算。对于那些受对象排序码序列初始排列及对象个数影响较大的,需要按最好情况和最坏情况进行估算
空间复杂度
- 算法所需要附加的存储
经典排序算法
插入排序:直接插入排序、希尔排序
http://blog.youkuaiyun.com/zhangye3017/article/details/79516062选择排序:直接选择排序、堆排序
http://blog.youkuaiyun.com/zhangye3017/article/details/79516062交换排序:冒泡排序、快速排序
http://blog.youkuaiyun.com/zhangye3017/article/details/79518238
其他排序:归并排序、计数排序
http://blog.youkuaiyun.com/zhangye3017/article/details/79532132
排序算法比较
类别 | 直接插入排序 | 希尔排序 | 选择排序 | 堆排序 | 冒泡排序 | 快速排序 | 归并排序 |
---|---|---|---|---|---|---|---|
时间复杂度 | O( n2 n 2 ) | O( n2 n 2 ) | O( n2 n 2 ) | O(nlgn) | O( n2 n 2 ) | O(nlgn) | O(nlgn) |
空间复杂度 | O(1) | O(1) | O(1) | O(1) | O(1) | O(lgn) | O(n) |
稳定性 | 稳定 | 不稳定 | 不稳定 | 不稳定 | 稳定 | 不稳定 | 稳定 |
优缺点 | 越接近有序效率越高 | 优化直接插入排序 | 效率最低 | 效率较高,建堆消耗大 | 效率低 | 效率快 | 最稳定算法 |