内部排序
插入排序
- 直接插入排序
- 折半插入排序
- 希尔排序
快速排序
- 起泡排序
- 快速排序
选择排序
- 简单选择排序
- 树形选择排序
- 堆排序
归并排序
基数排序
- 多关键字的排序
- 链式基数排序
外部排序
最佳归并树
树
二叉树
树的存储结构
顺序存储结构
用一组地址连续的存储单元依次自上而下,自左至右存储完全二叉树上的结点元素这样方式适合存储完全二叉树,一个深度为K的树最多需要2的K次方-1数组长度存储
链式存储结构
typedef struct BiTNode{
TelemType data;
struct BiTNode *lchild, *rchild;
}BitNode,*BiTree;
遍历二叉树
- 先序遍历
- 中序遍历
- 后序遍历
哈夫曼树
哈夫曼树,又称最优树,是一类带权路径最短的树,有着广泛的应用。
重要应用哈夫曼编码,用于远程传输,即将需传送的文字转换为二进制字符组成的字符串,传送电文时,希望总长尽可能短,又必须是任何一个字符的编码都不是另一个字符编码的前缀,称为前缀编码
红黑树
- 根节点和叶节点是黑色,叶节点是不存储数据的黑色空节点
- 任何相邻的两个节点不能同时为红色
- 任意节点到其可达的叶节点间包含相同数量的黑色节点
- 有H个节点的红黑树的高度最多是2log(n+1)
平衡二叉树 | 红黑树 |
---|---|
查找效率 <log(n) | 查找效率 <2log(n+1) |
插入、删除比较麻烦 | 插入、删除、查找比较稳定 |
红黑树的变色和旋转
//左旋伪代码
Left_Rotate(Tree,x){
y = x->right;
x->right = y-> left;
if(y->left != Tree->nil)
y->left->parent = x;
y->parent = x->parent;
if(x->parent == Tree->nil)
Tree->root = y;
else if(x == x->parent->left)
x->parent.left = y;
else
x->parent->right = y;
y->left = x;
x->parent = y
}
字典树
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。