02 2013 档案

快速排序
摘要:/* * A[p...r] 被划分为两部分,A[p...q] 和 A[q+1...r], * A[p...q] 的每个元素都小于等于 A[q+1...r] 中的元素。 * 对子数组递归调用划分方法,整个数组就有序了。 * */void quick_sort(int A[], int p, int r){ int q; if (p<r) q = partition(A, p, r); quick_sort(A, p, q); quick_sort(A, q+1, r);}void exchange(int *a, int *b){ int t = *a... 阅读全文

posted @ 2013-02-28 22:34 mhgu 阅读(196) 评论(0) 推荐(0)

二叉堆 堆排序 優先隊列
摘要:二叉堆是一个近似完满二叉树的结构,并同时满足堆的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。通常堆是通过一维数组来实现的。在起始数组为 0 的情形中:父节点i的左子节点在位置 (2*i+1);父节点i的右子节点在位置 (2*i+2);子节点i的父节点在位置 floor((i-1)/2);在堆的数据结构中,堆中的最大值总是位于根节点。堆中定义以下几种操作:堆调整(heapify):将堆的末端子结点作调整,维持堆的性质创建堆(build_heap):将一个无序数组构造为一个堆。堆排序(heap_sort):移除位在第一个数据的根结点,并做堆调整的递归运算#include <st 阅读全文

posted @ 2013-02-27 22:44 mhgu 阅读(188) 评论(0) 推荐(0)

c++ meta function static_gcd
摘要:meta function,boost mpl,boost::common_factor库,compile time:template <unsigned int x, unsigned int y, bool is_ordered = (x >= y)>struct static_gcd{ static int const value = static_gcd<y, x % y>::value;};template <unsigned int x, unsigned int y>struct static_gcd<x, y, false> 阅读全文

posted @ 2013-02-26 23:11 mhgu 阅读(279) 评论(0) 推荐(0)

成员函数對象
摘要:template <typename ReturnType, typename ArgType>struct closure_entity_base{ virtual ReturnType operator()(ArgType a)=0; virtual closure_entity_base* clone()const=0;};template <class ClassType, typename ReturnType, typename ArgType>struct closure_entity : closure_entity_base<ReturnType 阅读全文

posted @ 2013-02-26 23:07 mhgu 阅读(227) 评论(0) 推荐(0)

找出1到N中缺少的數?
摘要:《算法導論》中的練習題,n-1個元素的數組A,含有1到n之間的n-1個數,找出缺少的那個數?要求:O(n)解法一:sum = n*(n+1)/2;sum減掉A中的每個元素,剩下的就是要找的數。解法二:利用異或運算,x^x==0xor = 1^2^...^n;xor異或A中的每個元素,最後得到的就是所求。解法三:增加一個空位A[n-1],將A[i]移到A[ A[i] ],题目升级: 缺失两个数,求出这两个数。思想: 也是采用异或。 假设,缺失的数为s1和s2。则s1^s2=1^2^3.....^n^a[0]^a[1]^....a[n-3]。这个式子一目了然,无需多解释。问题是如何通过这个式子求. 阅读全文

posted @ 2013-02-25 22:31 mhgu 阅读(1423) 评论(0) 推荐(0)

找出n个元素的实数集合S中,是否存在两个元素的和等于给定的实数X?
摘要:《算法導論》裏的一個練習題:找出n个元素的实数集合S中,是否存在两个元素的和等于给定的实数X?要求: O(nlg#include void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)); void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)); #define EPSION 1e-5i 阅读全文

posted @ 2013-02-25 21:34 mhgu 阅读(326) 评论(0) 推荐(0)

插入排序 (insertion_sort)與 合並排序 (merge-sort)
摘要://插入排序int insertion_sort(int a[], int n){ int i, j; for (i=1; i<n; i++) { int key = a[i]; // 將a[i]插入到排好序的a[0, i-1]中 for (j=i-1; j>=0 && a[j] > key; j--) a[j+1] = a[j]; a[j+1] = key; } return 0;}分治法 (divide-and-conquer) 合並排序 (merge-sort)//合並排序 (merg... 阅读全文

posted @ 2013-02-25 21:28 mhgu 阅读(218) 评论(0) 推荐(0)

null pointer call in c++
摘要:#include <iostream>class Foo { public: static void bar() { std::cout << "NULL->bar()" << std::endl; }}; int main(void) { Foo * foo = NULL; foo->bar(); //<=> Foo::bar(); return 0; } 空指針可以引用類的static函數,等價于classname::static_fun();。 阅读全文

posted @ 2013-02-24 21:09 mhgu 阅读(154) 评论(0) 推荐(0)