![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论
William_WeiW
这个作者很懒,什么都没留下…
展开
-
算法导论之快速排序
#include using namespace std; int PARTITION ( int *A,int p, int r) { int x =A[r]; int i=p-1,a; for(int j=p;j<r;j++) { if(A[j]<=x) { i++;原创 2017-05-28 19:21:48 · 233 阅读 · 0 评论 -
算法导论——栈与队列
用两个栈来实现一个队列。 不包括栈与队列的具体实现,包括10-1课后练习。代码调用STL。 栈的特点是后进先出,队列的特点是先进先出。所以用两个栈实现队列只需要把在出队列时把第一个栈的元素全部压到第二个栈(第二个栈为空),这个时候第二个栈的顺序就是队列顺序也就是先进先出。以下是实现代码。#include #include using namespace std; void原创 2017-05-29 10:35:01 · 276 阅读 · 0 评论 -
算法导论——二叉查找树
代码部分实现,用insert生成二叉查找树。 暂无delete函数。 创建查找树是用insert逐个插入。 代码比较简陋,希望有所帮助。 #include using namespace std; struct Node { Node *left; Node *right; Node *parent; int data; Node(int x):le原创 2017-05-29 15:37:20 · 254 阅读 · 0 评论 -
算法导论——13.1红黑树的性质
红黑树的性质: (1) 每个结点或是红的,或是黑的。 (2) 根节点是黑的。 (3) 每个叶子结点是黑的。 (4) 如果一个结点是红的,则它的 (5) 对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。 一颗有n个节点的红黑树的高度至少为2lg(n+1). ①练习 13.1-1 13.1-2 :对于书上13-1图中插入36。①如果结点颜色是红原创 2017-06-01 21:54:46 · 406 阅读 · 0 评论 -
算法导论——13.2旋转
红黑树的旋转分为左旋和右旋。在假设x->right/x->left不是nil时,可做旋转。 旋转不会改变在中序遍历时的顺序,保持了二叉查找树的性质。 在左旋时,x->right(比x大)成为了x的p结点,x->right->left是x(符合二叉查找树),x->right的左结点(比x大)成为x的右结点。 可以发现,在旋转后保持了二叉查找树的性质。 练习: 13.2-1 写出右旋转的伪代原创 2017-06-01 22:17:54 · 432 阅读 · 0 评论