随笔分类 -  算法

摘要:堆排序是另一种排序算法,它是一种原地排序算法,其运行时间为O(nlgn),并且在任何时候,数组中只有常数个元素存储在数组以外。在此之前要明确什么是堆,堆数组结构是一种数据对象,其可被视为是完全二叉树。树中每个结点与数组中的该结点值的那个元素对应。表示堆的数组A有两个属性的对象:length[A]是数组中的元素的个数heap-size[A]是存放在A中的堆元素个数,也就是A[1..heap-size[A]]的元素是放在相应堆中,当然heap-size[A]]≤length[A]。对于给定的某个结点i,父结点下标: PARENT(i) return [i/2],(将i的二进制表示右移一位)左儿子下 阅读全文
posted @ 2013-01-19 16:47 北纬以北 阅读(193) 评论(0) 推荐(0)
摘要:快速排序算法是对包含n个数的输入数组进行排序,算法的期望时间为θ(nlgn),最坏的运行时间为θ(n2),并且其使用就地排序。举个例子 对数组A[p..r]排序可分成以下三个步骤:分解:数组A[p..r]划分成A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于等于A[q],而且小于等于A[q+1..r]中的元素;解决:通过递归调用快速排序,对数组A[p..q-1]和A[q+1..r]进行排序;合并:因为两个数组时就地排序,可以将它们直接合并下面是快速排序的过程QUICKSORT(A, p, r)if p < r then q ← PARTITION(A, p 阅读全文
posted @ 2013-01-15 23:58 北纬以北 阅读(145) 评论(0) 推荐(0)