
算法设计与分析基础
文章平均质量分 64
zenglinshan
越努力,越幸运
展开
-
蛮力法之选择排序(C实现)
#include void DataSwap(int* data1, int* data2) { int temp = *data1; *data1 = *data2; *data2 = temp; } void SelectionSort(int* pDataArray, int iDataNum) { int i, j;原创 2015-11-04 13:36:11 · 2658 阅读 · 1 评论 -
欧几里得算法(C实现)
#include int Euclid(int m, int n);int main() { int m, n; printf("输入两个整数:"); scanf("%d%d", &m, &n); printf("最大公约数为:%d\n", Euclid(m, n)); return 0;} int Euclid(int m, int n) { int r, num =原创 2015-11-02 17:53:28 · 1042 阅读 · 0 评论 -
连续整数检测法(C实现)
#include int judge(int m, int n);int main() { int m, n, t; printf("输入两个整数:"); scanf("%d%d", &m, &n); printf("%d\n", judge(m, n)); return 0;} int judge(int m, int n) { int t, num = 0; t =原创 2015-11-02 17:57:49 · 3902 阅读 · 0 评论 -
哈夫曼编码(C实现)
/*------------------------------------------------------------------------- * 实现过程:着先通过 HuffmanTree() 函数构造哈夫曼树,然后在主函数 main()中 * 自底向上开始(也就是从数组序号为零的结点开始)向上层层判断,若在 * 父结点左侧,则置码为 0,若原创 2015-11-12 17:13:44 · 1332 阅读 · 0 评论 -
分治法之合并排序(C实现)
合并排序#include void merge(int a[],int p,int q,int r){ int n1=q-p+1,n2=r-q; int b1[n1]; int b2[n2]; int i=0,j=0,temp1=p,temp2=q; while(p<=q) { b1[i]=a[p]; ++i原创 2015-11-04 13:43:40 · 3364 阅读 · 2 评论 -
一个十进制的正整数在二进制表示中的数字个数(C实现)
#include int Binary(int n) { int count = 1; while (n > 1) { count++; n /= 2; } return count;}int main() { int n; printf("请输入一个十进制的正整数:"); scanf("%d", &n); printf("其在二进制表示中的二进制数字个数为:%d原创 2015-11-07 15:13:20 · 776 阅读 · 0 评论 -
n阶矩阵的乘法(C实现)
#include #include #define N 100void MatrixMultilication(float (*a)[N], float (*b)[N], int n) { int i, j, k, c[n][n]; for (i=0; i<n; i++) for (j=0; j<n; j++) { c[i][j] = 0; for (k=0; k<原创 2015-11-07 14:52:26 · 8021 阅读 · 0 评论 -
蛮力法之冒泡排序(C实现)
#include void DataSwap(int* data1, int* data2) { int temp = *data1; *data1 = *data2; *data2 = temp; } void BubbleSort(int a[], int n) { int i, j; for (i=0; i<n-1;原创 2015-11-07 12:11:21 · 1720 阅读 · 0 评论 -
从n个元素的列表中查找最大值(C实现)
#include int MaxElement(int a[], int n) { int i, maxval=a[0]; for (i=1; i<n; i++) if(a[i] > maxval) maxval = a[i]; return maxval;}int main() { int n, i, a[10000]; printf("原创 2015-11-07 12:58:46 · 1411 阅读 · 0 评论 -
元素唯一性问题(C实现)
#include #define true 1#define false 0int UniqueElements(int a[], int n) { int i, j; for (i=0; i<n-1; i++) for (j=i+1; j<n; j++) if (a[i] == a[j]) return false; return true;}int mai原创 2015-11-07 13:13:38 · 3074 阅读 · 0 评论 -
蛮力法之最近对问题(C实现)
#include #include /* 我们可以避免求平方根,窍门是忽略平方根函数,而只比较(x[i]-x[j])^2+(y[i]-y[j])^2的值本身。 */ int BruteForceClosestPoints(int n) { int d=1000, i, j, t, x[100], y[100]; for (i= 1; i < n + 1; i++) { pr原创 2015-11-07 21:02:06 · 5911 阅读 · 1 评论 -
蛮力法之字符串匹配(C实现)
#include #include int BruteForceStringMatch(char T[], int n, char P[], int m) { int i=0, j=0; for (i=0; i<n-m+1; i++) { j = 0; while (j < m && P[j]==T[i+j]) { j = j + 1; if (j = m)原创 2015-11-07 20:28:54 · 4570 阅读 · 0 评论 -
蛮力法之顺序查找(C实现)
#include #include /* 实现顺序查找时常常会使用这样一个小技巧:如果我们把键添加到列表的末尾,那么查找就一定会成功。 */ int SequentialSearch2(char a[], int n, char K) { a[n] = K; int i = 0; while (a[i] != K) i++; if (i < n) return i;原创 2015-11-07 19:42:43 · 1605 阅读 · 0 评论 -
动态规划之0-1背包问题(C实现)
#includeint c[10][100];/*对应每种情况的最大价值*/int knapsack(int m,int n) { int i,j,w[10],p[10]; printf("请输入每个物品的重量,价值:\n"); for(i=1;i<=n;i++) scanf("%d,%d",&w[i],&p[i]); for(i=0;i<10;i原创 2015-11-04 15:08:45 · 1257 阅读 · 0 评论 -
回溯法之0-1背包问题(C实现)
#includeint n,c,bestp;//物品的个数,背包的容量,最大价值int p[10000],w[10000],x[10000],bestx[10000];//物品的价值,物品的重量,x[i]暂存物品的选中情况,物品的选中情况void Backtrack(int i,int cp,int cw){ //cw当前包内物品重量,cp当前包内物品价值 int j;原创 2015-11-01 20:55:03 · 2961 阅读 · 1 评论 -
减治法之插入排序(C实现)
#include void InsertSort(int A[]); int main() { int i, a[100]; srand(time(0)); for ( i = 1; i < 101; ++i ){ a[i-1] = rand() % 1001; printf( "%3d ", a[i-1] ); if(i%1原创 2015-11-04 13:50:12 · 3064 阅读 · 0 评论 -
埃拉托色尼晒算法(C实现)
#include #define TRUE 1#define FALSE 0#define SIZE 1000int main(){ int i; /*i表示整数和对应的下标*/ int j; /*j表示正要处理的质数j之前的已处理j之后的未处理*/ int k; /*k表示正在处理的j的倍数从2开始到j*k<SIZE*/ int a[SIZE]; /*下标表示整数内容判断是否为原创 2015-11-02 18:03:06 · 763 阅读 · 0 评论