2013年7月16日

POJ 1002 487-3279(排序or不排序)

摘要: 一.排序1.快排,顺序统计2.堆排序优化二.不排序3,开10000000的数组,直接哈希映射,不用排序4.使用trie树,不用排序,深搜遍历输出 阅读全文

posted @ 2013-07-16 14:07 Gddxz 阅读(72) 评论(0) 推荐(0) 编辑

树状数组

摘要: 树状数组树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了对树状数组有个形 象的认识,我们先看下面这张图。 如图所示,红色矩形表示的数组C[]就是树状数组.. 阅读全文

posted @ 2013-07-16 13:50 Gddxz 阅读(183) 评论(0) 推荐(0) 编辑

堆排序

摘要: 堆排序 堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]#includeusing namespace std;void HeapAdjust(int *a,int i,int size) //调整堆 { int .. 阅读全文

posted @ 2013-07-16 11:46 Gddxz 阅读(121) 评论(0) 推荐(0) 编辑

归并排序

摘要: (1)分析: 算法时间复杂度:平均:O(nlogn) 最坏:O(nlogn) (2)实现: //将有二个有序数列a[first...mid]和a[mid...last]合并。void mergearray(int a[], int first, int mid, int last, int temp[]){ int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { if (a[i] <= a[j]) temp[k++] = a[i++]; e 阅读全文

posted @ 2013-07-16 11:37 Gddxz 阅读(137) 评论(0) 推荐(0) 编辑

导航