
算法
faithenXX
对互联网感兴趣
展开
-
排序:堆排序
//调整堆 //根部 n 左儿子 2*n+1 右儿子2*n+2 //时间复杂度O(lgn) void heap_adjust(int *A, int root, int size) { int lc = 2 * root + 1; int rc = 2 * root + 2; int max = root; if(lc A[root]) max = lc; if(rc A[m原创 2017-01-02 16:17:50 · 203 阅读 · 0 评论 -
排序:快速排序
代码: 时间复杂度: 一般情况O(nlgn); 最坏情况O(n*n),最坏情况发生在每次都把N个元素分成N-1和1两个部分的时候,即对已经排过序的数组再排序。原创 2016-12-26 21:07:01 · 217 阅读 · 0 评论 -
排序:插入排序
最坏算法复杂度O(n*n).原创 2016-12-28 16:37:00 · 207 阅读 · 0 评论 -
排序:归并排序的迭代写法与递归写法
两种写法的时间复杂度都为O(n*logn) 迭代写法: 思路:从最底层开始merge,从图中看就是从最上层到最下层,不断的排序合并。 代码: 递归写法: 代码:原创 2016-12-29 15:53:47 · 912 阅读 · 0 评论 -
最长公共子序列问题(LCS)
C++代码: //LCS问题(动态规划) string CommonSubsquence(string s1, string s2) { int size1 = s1.size();//一维 int size2 = s2.size();//二维 size1++; size2++; //开辟数组 int ** p = new int*[size2]; p[0] = new int原创 2017-02-09 17:48:38 · 295 阅读 · 0 评论 -
矩阵链乘法问题
//矩阵链乘法(动态规划) //假设三个矩阵(m*n n*a a*b)相乘,那么输入A为{m,n,a,b} int matrix_chain_order(int* A, int size) { int num = size-1; if(num == 0) return 0; if(num == 1) return A[0]*A[1]; int ** p = new int*[n原创 2017-02-10 11:10:26 · 400 阅读 · 0 评论 -
二叉树的递归和非递归遍历(前序、中序、后序)
1.前序遍历 //前序遍历递归形式 void PreOderTraversal(Node *root) { if(root) { coutdata<<" "; PreOderTraversal(root->lTreeNode); PreOderTraversal(root->rTreeNode); } } /原创 2017-02-16 10:43:37 · 398 阅读 · 0 评论