排序与顺序统计量 排序,就是把无序的对象,按照某些关键字,排列,使存储的顺序和关键字的大小之间存在一定关系。第i个顺序统计量就是,存储顺序中的第i个。
排序 (具体算法网站,http://www.cs.usfca.edu/~galles/visualization/Algorithms.html 我也是在网上看到的哦,不记得是谁发的了,如果作者看到,可以联系我)
第六章,堆排序,原址排序
- 堆,一棵完全二叉树(满二叉树的右下角的最后一行缺了一些)。与二叉树的生成不同,堆从下往上生成,容易保证它是完全二叉树的性质。插入结点也是从下往上调整。
- 但是,堆排序的时候,是总是把根结点和最后一个叶子结点对换,再从上往下调整的。
第七章,快速排序(不稳定)
- 最常用的算法,原址排序,与其他O(nlogn)算法比有最小的常数因子。依赖于主元的选择,可以用随机化减少最坏情况发生的概率。
第八章,线性时间排序。 时间减少的原因 1. 对处理的对象有限定 2. 空间换时间
- 由决策树推出,比较算法的下界 nlogn,也就是说,如果一个排序算法是基于比较的,那么,不可能比nlogn更少的时间了,最多就在常数因子上有进步
- 计数排序 排序对象限定:某一个范围内的可数个对象,比如,整数[1~k]。 空间消耗:非原址排序,以整数[1~k]为例,空间为 k+n。 算法时间中的k就是范围,n是需要排序的数的个数
- 基数排序 排序对象限定:1. 可以一位一位的排 2.一般基数排序是用计数排序作为基础排序的,所以,某一范围内的可数个对象。以多位数的整数为例,基数排序的思想就是,个位十位...这样的排。因此,它所用的基础排序直接影响到了它的性能。 算法时间中的d是位数。
- 桶排序 排序对象限定:均匀分布 空间消耗:非原址排序。 将数据映射到n个桶中,如果服从均匀分布的条件,桶的大小会趋于1。因此平均情况时间复杂度是O(n)
第九章,中位数和顺序统计量
- 特殊的顺序统计量,最大值和最小值。 单个确定,必须有n-1次比较才能确定。
- 基于快速排序的顺序统计量确定。期望时间O(n)。快速排序之所以适合做这件事,1. 每次都能确定一个顺序统计量 2.方便剪枝。 个人觉得归并排序应该是干不了这活的
- 分治算法,将数据5个5个分组,找中位数,找中位数,剪枝,递归。最坏时间复杂度O(n)。虽然没有验证过,但这个5,应该是有点讲究的。这是比快速排序剪枝策略更好的算法