
算法设计与基础
s零露漙兮
只想默默的编程,有个人在身边陪着我
展开
-
分治法_快速排序
【程序】#include <stdio.h>#define N 100void swap(int *p,int *q) //交换 { int t; t=*p; *p=*q; *q=t;}int Partition(int a[],int l,int r){ int i,j,p; p=a[l]; //把第一个数作为基准 i=l;j=r+1; w...原创 2018-03-30 10:54:41 · 617 阅读 · 0 评论 -
求幂
【从左至右】#include <stdio.h>#define N 100double left(int p[],int i,int a)//幂从左至右 { double t=1; for(;i>=0;i--) { if(p[i]==1) t=t*t*a; else t=t*t; } return t;}int main(){ int ...原创 2018-04-27 15:03:43 · 701 阅读 · 0 评论 -
霍纳法则
【程序】#include #define N 100int Horner(int a[],int n,int x)//霍纳法则 { int i,sum; sum=a[0]; for(i=1;i<n;i++) sum=sum*x+a[i]; return sum;}int main(){ int a[N],n=0,x,i,sum; printf("输入多项式系数(-1原创 2018-04-27 15:01:22 · 214 阅读 · 0 评论 -
堆排序
【程序】#include <stdio.h>#define N 100void swap(int *a,int *b) //交换{ int t=*a; *a=*b; *b=t;}void sift(int h[],int n,int m) //以m为顶点调整堆 { int i,j,k,v,t; i=m; //i表示父结点 j=2*i; //j表示左...原创 2018-04-27 12:16:11 · 154 阅读 · 0 评论 -
FLoyd算法(求最短路径)
【程序】#include <stdio.h>#define N 105void Floyd(int D[][N],int n){ int i,j,k; printf("----------------------1\n"); for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) D[i][j...原创 2018-05-11 11:41:35 · 401 阅读 · 0 评论 -
Horspool算法
【程序】#include #include int table[27]; //前26个英文字母,最后一个空格 void ShifTable(char p[])//生成移动表 { int i; for(i=0;i<27;i++) table[i]=strlen(p); for(i=0;i<strlen(p)-1;i++) //最后一个字符不需要建立 table[p[i原创 2018-05-10 11:18:28 · 3138 阅读 · 0 评论 -
递归生成格雷码
【程序】#include <stdio.h>int n;char s[17]; //假设最大只有16位void dfs(int i){ if(i==n) printf("%s\n",s); //到达底部就输出 else { dfs(i+1); //深度优先搜索 if(s[i]=='0') s[i]='1'; else s[i]='0'; ...原创 2018-04-19 16:37:01 · 377 阅读 · 0 评论 -
递归调用_汉诺塔
【程序】#include <stdio.h>void fun(int n,char a,char b,char c){ if(n==1) printf("%c->%c\n",a,c); //还剩下最后一个盘子的时候,直接移动 else { fun(n-1,a,c,b); //先把n-1个从a借c移到b printf("%c->%c...原创 2018-03-31 10:22:46 · 255 阅读 · 0 评论 -
分治法_合并排序
【程序】#include void Merge(int b[],int p,int c[],int q,int a[]){ int i,j,k; i=j=k=0; while(j<p&&k<q) { if(b[j]<=c[k]) a[i++]=b[j++]; else a[i++]=c[k++]; } if(j==p) while(k<q) a[i原创 2018-03-31 10:17:56 · 412 阅读 · 0 评论 -
分治法_归并求最大
【程序】#include int Max(int a[],int left,int right){ int max1,max2,max,mid; if(left+1==right) //最后2个数 return a[left]>a[right]?left:right; else if(left+1<right) //个数大于2的情况下 { mid=(l原创 2018-04-08 11:17:23 · 264 阅读 · 0 评论 -
递归调用_阶乘
【程序】#include int fac(int n){ if(n==1||n==2) return n; else return n*fac(n-1); } int main(){ int n,sum; scanf("%d",&n); sum=fac(n); printf("%d",sum);}原创 2018-04-08 11:14:45 · 679 阅读 · 0 评论 -
减治法_计算第k小(非递归)
【程序】#include #define N 100void swap(int *p,int *q) //交换 { int t; t=*p; *p=*q; *q=t;}int Partition(int a[],int l,int r) //一趟排序返回基准 { int i,j,p; p=a[l]; i=l;j=r+1; wh原创 2018-04-08 11:03:01 · 1139 阅读 · 0 评论 -
减治法_计算第k小(递归)
【程序】#include #define N 100void swap(int *p,int *q) //交换 { int t; t=*p; *p=*q; *q=t;}int Partition(int a[],int l,int r) //一趟排序返回基准 { int i,j,p; p=a[l]; i=l;j=r+1; wh原创 2018-04-08 11:01:39 · 2052 阅读 · 0 评论 -
背包问题
【程序】#include <stdio.h>#define N 105int a[N][N],w[N],v[N]; //背包问题 int F1(int m,int n) //顺推,非递归算法 { int i,j; for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(w[i]>j) //不能放 a[...原创 2018-05-24 19:45:31 · 236 阅读 · 0 评论