排序算法:
快速排序,采用分治法的思想,分离为n个较小的规模的集合,独立而与原问题相同。
选取序列当中的一个关键字,依次正序找大逆序找小,然后挖坑填入。使得它左边的值都比它小,右边都比它大,这样的关键字称为中枢轴。
typedef struct
{
int r[MAXSIZE+1]; //存储排序数组,r[0]用作哨兵或temp
int length; //记录表长
}SqList;
void QSort(SqList*L,int low,int high) //对顺序表L中的子序列L->r[low...high]做快速排序
{
if (low<high)
{
// pivot=Partition(L,low,high); //将L->r[low...high]一分为二,算出枢轴值pivot
int i = low, j = high;
L->r[0] = L->r[i]; //用子表的第一个记录做枢轴记录,存于0,其位置i为坑位
while (i<j)
{
while (i<j && L->r[j] >= L->r[0]) //倒序查找较小值,并填入r[i]
j--; //找到较小值,并记录下一个大坑位置
if (i<j)
L->r[i++] = L->r[j]; //将较小值填入小坑位r[i]中,i++右移一位减少一次判断
while (i<j && L->r[i] <= L->r[0]) //正序查找较大值,并填入r[j]
i++; //找到较大值,并记录下一个小坑位置
if (i<j)
L->r[j--] = L->r[i]; //将较大值填入大坑位r[j]中,j--左移一位减少一次判断
}
L->r[i] = L->r[0]; //相对中枢值查找完毕,i=j将中枢值填入坑位
QSort(L,low,i-1); //对低子表递归排序
QSort(L,i+1,high); //对高子表递归排序
}
}
//迭代 斐波那契
int Fbi(int i)
{
if (i<2)
{
return i==0 ? 0:1;
}
return Fbi(i-1)+Fbi(i-2);
}
LinkList链表,更改链表数据的地方都需要使用指针。
LinkStack链栈,没有附加头结点,运算受限的单链表。
Queue队列,STL内API,push、pop、front、back、empty、size等。
KMP String
二叉树,反应物体之间层次结构。排序二叉树可以进行排序、快速查找;并查集分类;小根堆寻找最小节点。
//二叉排序树查找
BOOL SearchBST(BitTree T,int key,BitTree f,BitTree*p)//f为T的双亲,初始调用值为NULL//指针p指向该数据结点
{
if (!T)
{
*p=f;
return FALSE;
}
else if (key==T->data)
{
*p=T;
return TRUE;
}
else if (key<T->data)
{
return SearchBST(T->lchild,key,T,p);
}
else
return SearchBST(T->rchild,key,T,p);
}
算法源码链接cpp_algorithm.cpp
目录:
- 链表LinkList
- 创建链表,头插法
- 创建链表,尾插法,利用动态指针
- 删除链表
- 链表查找元素
- 链表指定位置插入元素
- 删除指定元素
- 链栈LinkStack
- 初始化栈
- 清空栈
- 获取栈顶元素
- 插入新元素到栈顶
- 删除栈顶元素
- 迭代,斐波那契
- 循环队列Queue(前段删除,后端插入)
- 获取队列长度
- EnQueue
- DeQueue
- string
- KMP模式匹配算法
- 获取子串pos个字符之后的位置
- 二叉树
- 前序遍历递归算法
- 中序遍历
- 尾序遍历
- 生成二叉树
- 二叉排序树BST查找
- BST插入
- 删除BST元素
- 删除二叉树BST
- BST右旋处理
- BST左旋处理
- 以T所指结点为根的二叉排序书做左平衡旋转处理
- 右平衡旋转处理
- 平衡二叉树AVL插入元素,并平衡旋转
- 二分查找,有序表
- 插值查找,二分法改进,适合数据分布较均匀的数列
- 斐波那契查找,大数据
- 有序查找
- 元素交换,常用
- 冒泡排序
- 冒泡法,反序交换
- 冒泡法,优化
- 选择排序,小者与第一位置交换
- 直插排序,将记录插入到已排序的有序表,得到记录+1的有序表
- 希尔排序
- 堆排序,书用于完全二叉树,2^n+1
- 堆排序,调整
- 归并排序
- 非递归的归并排序
- 将SR中相邻长度为s的子序列两两归并到TR[]
- 快排
- 获取枢轴值(左小右大,中心值)
- 小数组排序优化,>7枢轴快排,<=7直插排序
- QSort1,快排、小数组直插合并优化
- 图,一维数组存储顶点信息,二维数组存储边或弧的信息
- 创建无向图
- 无向图,邻接表的创建
- 邻接矩阵深度递归算法
- 邻接矩阵深度遍历
- 邻接表深度递归算法
- 邻接表深度遍历
- 邻接矩阵广度遍历
- 邻接表广度遍历
- 最小生成树,普里姆算法prim,查找遍历顶点最短路径,邻接矩阵
- kruskal克鲁斯卡最小生成树
- Dijsktra地杰斯特拉算法,最短路径
- Floyd佛洛依德算法,网图G中各顶点v到其余顶点w最短路径p[v][w]及权长度D[v][w]