01 2020 档案

摘要:我遇见了一个bug是这样的:一个node结点包含node * left和node * right两个指针域。 void fun(node * &a, node * b) { b->right = a->right; b->left = a; a->right->left = b; a->right 阅读全文
posted @ 2020-01-18 11:41 简讯 阅读(171) 评论(0) 推荐(0)
摘要:BST是一类用途极广的数据结构。它有如下性质:设x是二叉搜索树内的一个结点。如果y是x左子树中的一个结点,那么y.key<=x.key。如果y是x右子树中的一个结点,那么y.key>=x.key。 BST容易出现不平衡的情况,所以实际运用的时候还是以平衡的二叉搜索树为主,例如RB树,AVL树,tre 阅读全文
posted @ 2020-01-16 16:17 简讯 阅读(619) 评论(0) 推荐(0)
摘要:众所周知,红黑树是用途很广的平衡二叉搜索树,用过的都说好。所以我们来看看红黑树的是怎么实现的吧。 红黑树顾名思义,通过红与黑两种颜色来给每个节点上色。其中根结点和叶子结点一定是黑色的,并且红色结点的两个孩子一定是黑色的,每个结点到所有后代叶子的简单路径上,均包含相同数目的黑色结点(黑高bh)。 这里 阅读全文
posted @ 2020-01-16 16:09 简讯 阅读(662) 评论(0) 推荐(0)
摘要:B树是一种平衡搜索树,它可以看做是2-3Tree和2-3-4Tree的一种推广。CLRS上介绍了B树目前主要针对磁盘等直接存取的辅存设备,许多数据库系统也利用B树或B树的变种来存储信息。 本文主要针对代码实现作一些讲解。如果对B树性质或特点不了解的,请对照B树的定义来阅读本文。或先了解B树的定义,对 阅读全文
posted @ 2020-01-16 15:53 简讯 阅读(2684) 评论(0) 推荐(0)
摘要:SELECT算法利用快排中的partition思想来进行无序数组的快速选择。 寻找第i个顺序统计量可以简单理解为寻找第i小的元素。 该算法通过为partition选择一个好的主元,来保证Partition得到一个好的划分。 当然partition需要进行一些修改,把划分的主元也作为输入参数。 代码如 阅读全文
posted @ 2020-01-14 19:56 简讯 阅读(755) 评论(0) 推荐(0)
摘要:桶排序假设输入数据服从均匀分布,平均情况下它的时间复杂度为O(n)。 桶排序将输入数据的区间均匀分成若干份,每一份称作“桶”。分别对每一个桶的内容进行排序,再按桶的顺序输出则完成排序。 通常使用链表来实现桶。 代码如下:(仅供参考) void Insert(vector<double> & bkt, 阅读全文
posted @ 2020-01-14 19:42 简讯 阅读(1787) 评论(0) 推荐(0)
摘要:基数排序是一种思想很值得学习的排序方法。 它突破了正常的排序思维:先排高位,如果高位相同再排次高位,直至最低。它的思想是利用稳定排序从低位开始排,最后再排最高位。 另外它用来划分的位不一定是一位一位的划分,还可以是每几位一组,然后按组从低到高来排序。 事实上,当总位数b等于O(lgn),并且每一组的 阅读全文
posted @ 2020-01-14 19:35 简讯 阅读(580) 评论(0) 推荐(0)
摘要:计数排序是需要假设输入数据的排序之一,它假设输入元素是0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,计数排序的时间复杂度为θ(n)。 因为不是通过比较来排序,所以它的时间复杂度可以达到θ(nlgn)以下。 计数排序是稳定的排序之一。 代码如下:(仅供参考) //计数排序期望输入数据都是 阅读全文
posted @ 2020-01-14 19:24 简讯 阅读(585) 评论(0) 推荐(0)
摘要:快速排序可以说是最重要的排序,其中延伸的思想和技巧非常值得我们学习。 快速排序也使用了分治的思想,原理如下: 分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中 阅读全文
posted @ 2020-01-14 19:09 简讯 阅读(776) 评论(0) 推荐(0)
摘要:归并排序利用分治策略进行排序。原理如下 分解:分解待排的n个元素的序列成个具n/2个元素的两个子序列。 解决:使用归并排序递归地排序两个子序列。 合并:合并两个已排序的子序列以产生已排序的答案。 归并排序的时间复杂度是θ(nlgn)。 归并排序是稳定排序之一。 归并排序不是原址排序,在合并阶段需要申 阅读全文
posted @ 2020-01-14 18:56 简讯 阅读(1497) 评论(0) 推荐(0)
摘要:插入排序是最常用的排序之一。 在输入规模较小的时候,插入排序的性能较好。 最好情况下插入排序的时间复杂度是O(n),平均情况则为O(n2)。 插入排序是稳定的排序算法之一。 基本思路为从第二个元素开始,依次插入前面已经排好序的序列,利用循环不变式很容易理解。 代码如下:(仅供参考) 1 void I 阅读全文
posted @ 2020-01-14 18:45 简讯 阅读(463) 评论(0) 推荐(0)