
数据结构与算法
小虾米 ~
这个作者很懒,什么都没留下…
展开
-
时间复杂度
时间复杂度:O(1)<O(logn)<O(n)<O(nlogn)<O()<O()<O()<O(n!)<O() 取数据 查找 插入 删除 数组 O(1) O(n) O(n) O(n) 链表 O(n) O(n) O(1) O(1) 二叉搜索树 O(logn...原创 2019-06-28 11:28:15 · 135 阅读 · 0 评论 -
不借助辅助空间的二叉树前序、中序、后序遍历(Morris遍历)
二叉树线索化二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息n个节点的二叉树中含有n+1个空指针域。利用二叉树中的空指针域 来存放在某种遍历次序下的前...原创 2019-09-11 22:25:10 · 385 阅读 · 0 评论 -
二叉树先序、中序、后序、层序遍历的递归和非递归实现
先序、中序、后序三种递归遍历://先序遍历void preOrder(TreeNode* head){ if(!head) return; cout<<head->val<<" "; if(head->left) preOrder(head->left); if(head->right) preOrder(head->righ...原创 2019-07-09 10:47:45 · 327 阅读 · 1 评论 -
快速排序的递归和非递归实现
非递归:#include<iostream>#include<stack>using namespace std;int partition(int*a,int low,int high){ int mid=(low+high)/2; if(a[low]>a[high]) swap(a[low],a[high]); if(a[mid]>...原创 2019-07-08 16:47:29 · 262 阅读 · 0 评论 -
堆排序的递归和非递归实现
非递归:#include<iostream>using namespace std;void heapAdjust(int *a,int s,int len){ int temp=a[s]; for(int j=2*s;j<=len;j*=2) { if(j<len && a[j]<a[j+1]) j++; if(a[...原创 2019-07-08 16:45:13 · 301 阅读 · 0 评论 -
直接插入排序的递归和非递归实现
非递归:#include<iostream>using namespace std;void insert(int *a,int len){ int j; for(int i=1;i<=len;i++) { if(a[i]<a[i-1]) { int temp=a[i]; for(j=i-1;j>=0 && te...原创 2019-07-07 15:58:23 · 900 阅读 · 0 评论 -
计数排序
计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。计数排序过程中不存在元素之间的比较和交换操作,根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置。计数排序涉及到3个数组数组A:原始的待排序数组数组C:A数组的元素的值A[i]是C数组的下标C[A[i]],对应的...原创 2019-08-01 11:59:02 · 165 阅读 · 0 评论 -
简单选择排序的递归和非递归实现
非递归:#include<iostream>using namespace std;void select(int *a,int len){ int min; for(int i=0;i<len;i++) { min=i; for(int j=i+1;j<=len;j++) { if(a[min]>a[j]) ...原创 2019-07-07 15:28:42 · 891 阅读 · 0 评论 -
冒泡排序的递归和非递归实现
非递归:void bubble(int *a, int len){ int i,j; for(i=0;i<len-1;i++) { for(j=len-1;j>i;j--) { if(a[j]<a[j-1]) swap(a[j],a[j-1]); } }}int main(){ int a[10]={10,25,8,18,2...原创 2019-07-07 11:26:51 · 966 阅读 · 0 评论 -
归并排序的递归和非递归实现
非递归:#include<iostream>using namespace std;//将有序的SR[i,..,m]和SR【m+1,...,n]归并为有序的TR[i,...n]void merge(int *SR,int*TR,int begin,int m,int end){ int i,j; int k=begin; for(i=begin,j=m+1;i...原创 2019-07-07 18:14:09 · 193 阅读 · 0 评论 -
[dp算法]逃离农场
【逃离农场】牛牛在农场饲养了n只奶牛,依次编号为0到n-1, 牛牛的好朋友羊羊帮牛牛照看着农场.有一天羊羊看到农场中逃走了k只奶牛,但是他只会告诉牛牛逃走的k 只奶牛的编号之和能被n整除。你现在需要帮牛牛计算有多少种不同的逃走的奶牛群。因为结果可能很大,输出结果对1,000,000,007取模。例如n = 7 k = 4: 7只奶牛依次编号为0到6, 逃走了4只编号和为7的有:{0, ...原创 2019-08-02 16:41:11 · 320 阅读 · 0 评论 -
KMP算法
定义 Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。算法流程假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j = -1,或者当前字...原创 2019-09-22 21:11:17 · 352 阅读 · 0 评论