摘要: 勇气,还需要勇气。 阅读全文
posted @ 2012-01-08 21:21 LeavingQ 阅读(154) 评论(0) 推荐(0)
摘要: 连续写了几天排序了。。写完这个换换口味。。 之前5篇BLOG的排序算法都是基于比较的方法,这种比较排序有运行时间的下界:T(n) = Ω(nlgn)。因此需要别的算法模型来实现更快速的排序。 计数排序是一种运行时间在输入的某种假设情况下可以为Θ(n)的算法,它的过程中没有比较环节。 基本的思路就是假设输入序列中任意的元素x都满足x∈[0, k],且x和k都为整数。然后对每一元素x,都确定出序列中比... 阅读全文
posted @ 2012-01-08 19:50 LeavingQ 阅读(398) 评论(0) 推荐(0)
摘要: 今天是最后一个比较排序。堆排序使用了一种特殊的数据结构——堆,和C语言里的用于动态内存分配的堆不是一个概念。堆排序里的堆事实上是二叉树,因而又叫二叉堆。除了最后一层以外它是个满二叉树,最后一层剩余的数据从左边开始向右填。可以很容易看出一些性质:对于一个结点i,它的父结点索引为 floor(i/2),左子女为2i,右子女为2i + 1,在树图的右边还有它在数组中的存储方式。另外堆可以分成两类:最大堆和最小堆。最大堆的性质是对于除了根结点之外的每个结点i都有A[parent(i)] ≥ A[i],因此根结点具有最大值,左图中就是一个最大堆的例子。而最小堆的情况相反。堆排序中使用的是最大堆。另外还有 阅读全文
posted @ 2012-01-08 03:33 LeavingQ 阅读(456) 评论(4) 推荐(0)