算法
算法实现
霍传飞
hello world!
展开
-
堆排序(大顶堆)
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#define swap(a, b) { \ __typeof(a) __temp = a;\ a = b; b = __temp;\}void downUpdate(int *arr, int n, int ind) { while ((ind << 1) <= n) {.原创 2021-10-02 00:01:03 · 93 阅读 · 0 评论 -
二分查找
#include <stdio.h>#include <inttypes.h>#define P(func) \ printf("%s = %d\n", #func, func);int binary_search(int *num, int n, int x) { int head = 0, tail = n - 1, mid; while (head <= tail) { mid = (head + tail) >> 1; if (num原创 2020-12-05 23:17:45 · 100 阅读 · 0 评论 -
哈希表
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct Node { char *str; struct Node *next;} Node;typedef struct HashTable { Node **data; int size;} HashTable;Node *init_node(char *str, Node *head) { Node *p原创 2020-12-05 23:16:34 · 99 阅读 · 0 评论 -
顺序表及扩容
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <inttypes.h>#include <time.h>typedef struct Vector { int *data; int size; int length;} Vec;Vec *init(int n) { Vec *v = (Vec *)malloc(sizeof(Vec));原创 2020-12-05 23:14:06 · 474 阅读 · 0 评论 -
循环队列及扩容
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>typedef struct Queue { int *data; int head; int tail; int length; int cnt;} Queue;Queue *init(int n) { Queue *q = (Queue *)malloc(sizeof(Queue));原创 2020-12-05 23:04:33 · 495 阅读 · 1 评论 -
森林与并查集
#include <stdio.h>#include <stdlib.h>#include <stdio.h>//路径压缩#define swap(a, b) { \ __typeof(a) __temp = a;\ a = b, b = __temp;\}typedef struct UnionSet { int *father;//, *size; int n;} UnionSet;UnionSet *init(int n) { Un原创 2020-12-05 23:00:29 · 111 阅读 · 0 评论 -
优先队列
#define swap(a, b) {\ __typeof(a) __temp = a;\ a = b, b = __temp;\}typedef struct priority_queue { int *data; int cnt, size;} priority_queue;priority_queue *init(int n) { priority_queue *q = (priority_queue *)malloc(sizeof(priority_queue)); q-.原创 2020-12-05 22:58:37 · 122 阅读 · 0 评论 -
非稳定排序
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#define swap(a, b) { \ __typeof(a) __temp = a; \ a = b, b = __temp; \}#define TEST(arr, n, func, args...) { \ int *num = (int *)malloc(sizeof(int) *原创 2020-12-05 22:56:22 · 232 阅读 · 0 评论 -
稳定排序
#define swap(a, b) {\ a ^= b, b ^= a, a ^= b; \}#define TEST(arr, n, func, args...) { \ int *num = (int *)malloc(sizeof(int) * n);\ memcpy(num, arr, sizeof(int) * n);\ output(num, n);\ printf("%s = ", #func);\ func(args);\ output(num, n);\ free.原创 2020-12-05 22:54:06 · 122 阅读 · 0 评论 -
二叉排序树
二叉排序树:根节点大于左子节点,但小于右子节点顺序: 左 > 根 >右#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node { int data; struct Node *lchild, *rchild;} Node;typedef struct Tree { struct Node *root; int n;} Tree;Node原创 2020-11-22 22:20:12 · 216 阅读 · 0 评论 -
广义表转二叉树
广义表转二叉树广义表 A(B(,D),C(E,)) 转出为:前序: A B D C E中序: B D A E C后序: D B E C Atypedef struct Node { char data; struct Node *lchild, *rchild;} Node;typedef struct Tree { Node *root; int n;} Tree;typedef struct Stack { Node **data; int top, size;原创 2020-11-22 00:10:06 · 2047 阅读 · 3 评论 -
牛顿迭代算法实现-C语言
牛顿迭代用于一元高次方程求解例如:y=x∗x−5=0例如: y = x * x - 5 = 0例如:y=x∗x−5=0#include <stdio.h>#include <math.h>double F(double x, double n) { return (x * x - n);}double f(double x) { return 2 * x;}double newton(double (*F)(double, double), double原创 2020-10-15 14:21:22 · 215 阅读 · 0 评论 -
二分查找算法实现及使用-C语言
折半查找(二分查找)在单调的区间里查找一个数值X,如果存在返回下标。复杂度logNint binary_search(char *arr, int n, int x) { int head = 0, tail = n - 1, mid; while (head <= tail) { mid = (head + tail) >> 1; if (arr[mid] == x) return mid; if (arr[mid] < x) head = mid + 1;原创 2020-10-12 17:00:24 · 234 阅读 · 0 评论 -
线性筛算法实现-C语言
线性筛1,标记一个范围内的数字是否是合数,没有被标记的则为素数2,算法空间复杂度O(N),时间复杂度O(N)3,总体思想是用一个整数M去标记合数N,其中N和M具有如下性质 1)N中最小的素因子数为P 2)N可以表示为P * M 3)P一定小于等于M中最小的素因子 4)利用M * P‘(所有不大于M中最小素数的集合)标记N1,N2,N3 … …#include <stdio.h>#define MAX_N 100int prime[MAX_N + 5];void原创 2020-10-10 17:28:20 · 668 阅读 · 0 评论 -
素数筛算法实现-C语言
素数筛1,标记一个范围内的数字是否是合数,没有被标记的则为素数2,算法的空间复杂度为O(N),时间复杂度为O(N * loglogN)3,总体思想是用素数去标记掉不是素数的数字,例如我知道i是素数,那么2i,3i,4i …就都不是素数一句话:用素数标记合数#include <stdio.h>#include <inttypes.h>#define MAX_N 100int prime[MAX_N + 5];void init() { for (int i =原创 2020-10-10 10:11:40 · 430 阅读 · 0 评论