
算法
cwjokaka
GitHub: https://github.com/cwjokaka
展开
-
【数据结构】之利用并查集解决食物链问题
上一篇我简单地封装了一个并查集:【数据结构】之并查集简易封装这次用它来解决一个食物链的问题:/** * 食物链问题: * 有N只动物,编号为1到N,所有动物都属于A,B,C中的其中一种。 * 已知A吃B,B吃C,C吃A。 * 按顺序给出以下两种信息共K条: * 第一种:x和y属于同一种类。 * 第二种:x吃y。 * 然而这些信息可能会出错:有可能有的信息和之前给出的信息矛原创 2018-01-14 21:17:47 · 510 阅读 · 0 评论 -
【数据结构】之实现并查集
#include /** * 并查集适用于管理元素分组情况的数据结构,本质上是树结构(不是二叉树) * 可以高效的进行以下操作: * 1.判断两个元素是否属于同一组(通过判断两个元素的根节点是否一样即可) * 2.合并两个元素所在的组(把其中一个元素的根节点的父节点指向另一个元素的根节点) * * 在该实现下,进行一次操作的时间复杂度为O(a(N)) * 其中N是元素个数,a(N原创 2018-01-03 23:50:20 · 257 阅读 · 0 评论 -
【数据结构】之用堆实现优先队列
#include #include /** * 使用堆来实现优先队列 * 堆的最重要性质就是子节点的值>=父节点的值, * 而且树的节点是从上到下、从左到右的顺序紧凑排列的 *///这里我封装了一个二叉树typedef struct BinaryTree{ int *note; int size; void (*push)(struct BinaryTr原创 2017-12-25 23:16:27 · 460 阅读 · 0 评论 -
树的算法_1,并查集
#include //元素个数#define ELEM_C 10//开始先假设每一个接点都是单独的一棵树,下标(节点)对应的值为它的父节点//例如:节点0的根节点就是其本身:elems[0] == 0、elems[4] == 4int elems[ELEM_C] = {0,1,2,3,4,5,6,7,8,9};//得到当前节点的根节点int getRoot(int elem){原创 2017-09-22 01:08:21 · 231 阅读 · 0 评论 -
排序算法_3,堆排序2
#include int h[15] = {0,99,5,36,7,22,17,46,12,2,19,25,28,1,92}; //堆数组,h[0]不在计算范围内,不是堆里的元素,请忽略int n = 14; //堆元素个数//两数交换函数void swap(int *x, int *y){ int t; t = *x; *x = *y; *y原创 2017-09-21 01:22:27 · 184 阅读 · 0 评论 -
排序算法_3,堆排序
#include int h[15] = {0,99,5,36,7,22,17,46,12,2,19,25,28,1,92}; //堆数组,h[0]不在计算范围内,不是堆里的元素,请忽略int n = 14; //堆元素个数//交换两个数void swap(int *x, int *y){ int t; t = *x; *x = *y; *y原创 2017-09-20 21:39:37 · 214 阅读 · 0 评论 -
javascript实现排序算法
引言 排序算法是数据结构和算法之中的基本功,无论是在笔试还是面试,还是实际运用中都有着很基础的地位。这不正直七月,每年校招的备战期,所以想把常见的排序算法记录下来。在本篇文章中的排序算法使用 JavaScript 实现。 一、 冒泡排序 冒泡排序是排序算法中最简单的一个算法,其优点是易理解,易实现。在一些对性能要求不高且数据量不大的需求中,冒泡排转载 2017-09-20 10:11:09 · 325 阅读 · 0 评论 -
排序算法_2,快速排序
#include #include //快速排序 平均时间复杂度O(NlogN) 最差时间复杂度为O(N^2)//从小到大排序void quickSort(int *a, int len){ int temp; //数组头尾的两个下标 int head=0, tail=len-1; if (head > tail) retur原创 2017-09-18 21:48:10 · 433 阅读 · 0 评论 -
排序算法_0,桶排序
#include #define A_LEN 10static int a[A_LEN];void main() { int i, j, temp, numCount; //要输入的数字个数 scanf("%d", &numCount); for (i = 0; i ; ++i) { scanf("%d", &temp);原创 2017-09-17 13:29:34 · 227 阅读 · 0 评论 -
排序算法_1,冒泡排序
#include #include //时间复杂度为O(N^2)//冒泡法从小到大排序void main() { int *a; int numCount; int i, j, temp; //输入需要排序数字的个数 printf("input numCount:\n"); scanf("%d", &numCount); //动态生原创 2017-09-18 21:13:22 · 360 阅读 · 0 评论 -
【数据结构】之并查集简易封装
原理可以看上一节:【数据结构】之实现并查集下面对并查集进行简单的封装:头文件union_find.h:#ifndef INC_6_FOOD_LINK_UNION_H#define INC_6_FOOD_LINK_UNION_H#include #include typedef struct UnionFind{ unsigned int size; int原创 2018-01-14 21:08:47 · 318 阅读 · 0 评论